Articles of android view

AppCompat视图与普通Android视图之间的差异

AppCompat视图组件和标准/默认视图组件之间有什么区别? 例如, AppCompatEditText与EditText之间或AppCompatButton与Button之间的差异。 查看android.support.v7.widget的开发人员文档 , AppCompat视图组件被描述为“ tint aware ”,但这是唯一的区别,这究竟是做什么的?

使用View.BaseSavedState覆盖View.onSaveInstanceState()和View.onRestoreInstanceState()?

假设您希望从现有的View实现派生自己的View类,添加一些值,从而维护一些以有意义的方式表示View状态的variables。 如果您的View会像其他人一样自动保存其状态(如果分配了ID),那么您可能希望覆盖onRestoreInstanceState()和onSaveInstanceState() 。 当然,您需要调用基类的相应方法,并且需要将状态信息与基类的信息组合在一起。 显然,唯一安全的方法是将超类’ Parcelable包装在一个自己的Parcelable这样键就不会混淆了。 现在有View.BaseSavedState及其有趣的getSuperState()方法,但我不知道如何真正增加价值,只是将基类’ Parcelable与派生的View的状态值一起存储并返回它。 另一方面,也许某些其他系统组件会期望所有InstanceState信息都是View.AbsSavedStatetypes(例如,可以调用getSuperState() )? 您愿意分享的任何经历?

为什么我的EditText复制/粘贴菜单位于EditText下? 如何更改popup窗口的z顺序?

注意 如果有人知道如何订购(z-order)Windows通过windowmanager添加,我也会接受答案,因为它将回答所有问题。 实际上我只是通过windowManager.addView(MyView)立即执行windowManager.addView(MyView)以将视图放在另一个视图之前,但这并不理想,因为它可视地删除并添加视图。 它看起来很疯狂,他们在android中没有构建function来做这么简单的思考。 我创建了一个包含EditText的视图(linearlayout)。 我通过WindowManager.addView(view,Layout_Params)在活动中添加此视图; 但我有问题,edittext将生成的每个popup窗口(如复制/过去菜单或单词建议菜单)将在其他视图下,甚至在他们自己的EditText视图下(不在图片上,edittext具有透明背景) 我将会 我用这些布局参数创建视图(即:LinearLayout): protected WindowManager.LayoutParams createLayoutParams() { WindowManager.LayoutParams p = new WindowManager.LayoutParams(); p.gravity = Gravity.LEFT | Gravity.TOP; p.width = 0; p.height = 0; p.format = PixelFormat.TRANSLUCENT; p.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED; p.flags = NOT_FOCUSABLE_FLAGS; // TYPE_APPLICATION allows for popups in browser windows (like edit menus) p.type = WindowManager.LayoutParams.TYPE_APPLICATION; p.token = null; […]

键盘显示时,DialogFragment不会resize

我正在尝试使用SherlockDialogFragment来询问用户的一些输入。 我的手机上的一切正常(Galaxy Nexus,4.2),但是在较小的手机(模拟器2.3.3)上,当键盘出现时,它覆盖了DialogFragment的两个按钮,如下所示: 我的布局在ScrollView中,我在我的onViewCreated SOFT_INPUT_ADJUST_RESIZE更改为onViewCreated 。 我也尝试过SOFT_INPUT_ADJUST_PAN ,但它没有用 MyCustomDialog.java public class AddTaskDialog extends SherlockDialogFragment implements OnDateSetListener{ //… @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); } public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); this.inflater = getActivity().getLayoutInflater(); View mainView =inflater.inflate(R.layout.custom_dialog, null); […]

为什么有些android代码有公共字段?

关于在面向对象编程中使用公共字段有很多问题和答案,并且大多数建议不要使用公共字段有很多原因。 但是当我查看Android的代码时,我发现一些类正在使用公共字段。 例如, Android.view.View具有公共字段mCachingFailed和mAttributes 。 他们为什么公开? 很难想象这是谷歌和AOSP的错误。

如何获得与整个屏幕对应的屏幕坐标,而不是触摸的视图?

我通过处理一个View Item的触摸事件从我的屏幕获取真实(x,y)有些麻烦。 我有这个: 当我触摸View项时,它会给我坐标位于左上角的原点,如果我将手指滑出视图,它会给我负坐标(向上或向左滑动时)。 我想在屏幕上获取View位置,将其添加到我得到的(x,y)坐标,因此最终结果是(0,0)位于整个屏幕的左上角。 我还需要总的屏幕尺寸,以便我知道手指何时位于右下角。 我怎样才能做到这一点? 谢谢。

Android:如何通过父级剪辑视图,如CSS overflow:hidden

我的意见如下: 如父亲RelativeLayout所示,我使用的是android:clipToPadding=”true”和android:clipChildren=”true” ,但这个父视图的子节点仍在其外部突出。 或者我是这样做的吗? 我如何实现CSS的overflow:hidden ?

ContentLoadingProgressBar的示例用法

我刚跳过,在android中的开发者网站上发现了这个类ContentLoadingProgressBar 。 我搜索找不到该课程的任何用法或解释。 我已经在课堂上列出了几个问题,如果有人回答它会很棒。 它与ProgressBar有什么不同? 我们应该自己显示/隐藏ProgressBar吗? 设计ProgressBar的样式? https://developer.android.com/reference/android/support/v4/widget/ContentLoadingProgressBar.html

android:fitsSystemWindows不工作

在我的主题中,我定义了以下规则来在状态栏后面绘制我的观点: @android:color/transparent true 并在Activity(onCreate)中: getWindow.getDecorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN ) 然后,在我的View中使用Barcodescanner,它应该在状态栏后面绘制,这是有效的。 但是,当我将android:fitsSystemWindows应用于任何子视图时,他们不会调整其位置。 但是,当我将它应用于根元素时,它正在工作。

有没有办法以编程方式在给定的应用程序中find所有Windows?

是否可以以编程方式枚举应用程序中的所有android.view.Window或装饰视图? 例如, Dialogs将在一个新Window打开,与主Activity窗口分开。 我可以通过Dialog.getWindow()find它们,但我不知道如何使用内置组件(如活动菜单popup窗口)执行此操作。 有没有办法,从Application , Context或WindowManager ,或其他东西,枚举与我的应用程序相关联的Windows? 我可以使用adb dumpsys window查看我的所有应用程序adb dumpsys window ,但我正在寻找一种方法在我的应用程序中执行此操作而不需要root。