Articles of android custom view

View.onTouchEvent仅注册ACTION_DOWN事件

我正在实现一个自定义TextView ,我想在触摸视图时执行一些操作。 我认为onTouchEvent方法可以在视图中为我提供全方位的触摸,而无需使用setOnTouchListener (我正在尝试在视图中而不是在活动中完成所有工作,因此它是可移植的),但是唯一的触摸事件已注册是ACTION_DOWN 。 如果我使用OnTouchListener在活动中设置OnTouchListener ,我会获得全部触摸事件,但onTouchEvent却没有。 任何人都知道为什么会这样,或者任何人都可以提供一个不涉及使用setOnTouchListener的解决方案(这会阻止实现活动设置自己的监听器)?

动态高度viewpager

我正在尝试在自定义滚动视图中创建一个自定义viewpager,它动态地包装当前孩子的高度。 package com.example.vihaan.dynamicviewpager; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.widget.ScrollView; /** * Created by vihaan on 1/9/15. */ public class CustomScrollView extends ScrollView { private GestureDetector mGestureDetector; public CustomScrollView(Context context, AttributeSet attrs) { super(context, attrs); mGestureDetector = new GestureDetector(context, new YScrollDetector()); setFadingEdgeLength(0); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return super.onInterceptTouchEvent(ev) && […]

使用数组引用作为自定义android视图的XML属性

此问题已解决,请参阅注释以获取详细信息。 我正在扩展现有的Android视图并加载一些自定义属性,如使用XML声明自定义Android UI元素和定义自定义attrs中所述 。 具有布尔和整数格式的属性可以正常工作,但是当我尝试指定对数组资源的引用时,应用程序在启动时崩溃。 我在xml资源文件中定义了一个整数数组,我试图将它用作自定义视图的属性。 我可以使用数组资源来设置android Spinner类的“entries”属性而没有错误,所以它似乎是我的实现中的一个问题。 logcat消息似乎没有提供有关崩溃的任何具体信息,但我仍然在寻找,所以如果我find了什么,我会更新。 属性由(在attrs.xml中)声明: 该数组定义为(在arrays.xml中): 1 2 3 我通过以下方式引用数组: 这会导致应用程序立即崩溃。 此外,如果我引用颜色资源而不是数组,那么应用程序不会崩溃。 有谁知道如何处理这个问题?

Android – 在运行时更改自定义标题视图

我在我的应用程序中为每个活动使用自定义标题视图。 在其中一个活动中,基于按钮点击,我需要更改自定义标题视图。 现在,每当我调用setFeatureInt时,这都可以正常工作。 但是,如果我尝试更新自定义标题中的任何项目(例如更改按钮的文本或标题上的文本视图),则不会进行更新。 通过代码调试显示文本视图和按钮实例不为空,我也可以看到自定义标题栏。 但文本视图或按钮上的文本未更新。 还有其他人遇到过这个问题吗? 我该如何解决? 谢谢。 编辑 这是我尝试过的。 即使在调用postInvalidate时也不会更新。 getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.text_title); TextView databar = (TextView) findViewById(R.id.title_text); databar.setText(“Some Text”); databar.postInvalidate(); Button leftButton = (Button) findViewById(R.id.left_btn); leftButton.setOnClickListener(mLeftListener); leftButton.setText(“Left Btn”); leftButton.postInvalidate(); Button rightBtn = (Button) findViewById(R.id.right_btn); rightBtn.setOnClickListener(mRightListener); rightBtn.postInvalidate();

自定义Android calendarView

我正在寻找一个可以在如下对话框中使用的CalendarView: 我计划使用android.widget.CalendarView但它可以从API级别11获得。考虑到仍有很多用户使用android 2.3.3(但不是主要的用户可以放弃那些用户)这是一个问题。 我应该使用以下哪个选项? 1)可用的库并相应地使用它们。 2)自定义android.widget.CalendarView ? 如果#2,那么它有什么例子吗?

Android:具有现有布局的自定义视图的多个视图子项

我必须在Android中构建更复杂的自定义视图。 最终布局应如下所示: 但是,在XML文件中我只想定义它(不定义SomeView,SomeOtherView等): 这在Android中是否可行,如果是的话:最干净的方法是什么? 我想到的可能的解决方案是“覆盖addView()方法”和“删除所有视图并在以后再次添加它们”,但我不确定要走哪条路…… 非常感谢您的帮助! 🙂

“在Android 4.3上错误地调用了’requestLayout()”错误

我有一个简单的自定义TextView,它在其构造函数中设置自定义字体,如下面的代码 public class MyTextView extends TextView { @Inject CustomTypeface customTypeface; public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); RoboGuice.injectMembers(context, this); setTypeface(customTypeface.getTypeface(context, attrs)); setPaintFlags(getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG); } } 从Gingerbread到JB 4.2都可以正常工作。 但是当我在Android 4.3手机上显示自定义textview时,adb logcat充斥着以下消息。 10-05 16:09:15.225: WARN/View(9864): requestLayout() improperly called by com.cmp.views.MyTextView{42441b00 V.ED…. ……ID 18,218-456,270 #7f060085 app:id/summary} during layout: running second layout pass 10-05 16:09:15.225: WARN/View(9864): requestLayout() […]

如何在onDraw方法之外获取自定义视图的canvas大小?

我需要能够访问视图canvas的大小来执行一些计算。 由于某种原因,传递给onSizeChanged的视图大小不同于传递给onDraw的canvas大小。 我当前的解决方法使用布尔标志来确定何时需要进行计算。 理想的解决方案允许我在onSizeChanged方法中进行这些计算,所以我想知道……有什么办法可以在onDraw方法之外得到Canvas对象(或者至少是它的维度)吗? 我的代码如下。 它以给定角度绘制圆的半径。 当我使用canvas.centerX()来确定半径的起点和终点时,一切都很完美。 如果我使用传入onSizeChanged的参数,它甚至不能远程接近正确。 @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mSizeChanged = true; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (mSizeChanged) { RectF bounds = new RectF(canvas.getClipBounds()); float centerX = bounds.centerX(); float centerY = bounds.centerY(); float radianAngle = (float) […]

自定义ListView,日期为SectionHeader(使用自定义SimpleCursorAdapter)

我想显示ListView与Date作为SectionHeader。 我有:我使用自定义SimpleCursorAdapter从sqlite数据库显示ListView。 我的自定义SimpleCursorAdapter是: public class DomainAdapter extends SimpleCursorAdapter{ private Cursor dataCursor; private LayoutInflater mInflater; public DomainAdapter(Context context, int layout, Cursor dataCursor, String[] from, int[] to) { super(context, layout, dataCursor, from, to); this.dataCursor = dataCursor; mInflater = LayoutInflater.from(context); } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView […]

自定义视图如何访问其活动?

我有一个自定义视图,并希望访问其活动中可用的字符串。 我已经看到在视图类中使用getContext()代码,但没有方法可以访问通过intent为其活动提供的String。 如何使活动中的String可用于其自定义视图?