Articles of android view

键盘问题,同时专注于Android中的底部编辑文本

我正在开发一个Android应用程序,我愿意从用户那里获得输入。 我为它创建了一个布局,它有一个滚动视图作为根视图和相对布局,因为它的孩子所有其他布局都在这个相对布局中。 但是当编辑文本位于屏幕的底部并且用户点击它以带上键盘时,它会在编辑文本和键盘之间显示一些空白框,然后如果用户输入任何单词,它就不会显示在编辑文本中。 但是如果编辑文本高于屏幕的一半大小,它就可以正常工作。 通过查看下面的图像,您可以更清楚地了解情况 这是我的代码 有人遇到过这种问题吗? 请帮忙!!!

在我的自定义视图上重用标准的android属性

我正在使用以下布局创建自定义复合视图 如您所见,它只是一个TextView和一个EditText 。 我希望能够为我的自定义视图提供转发到TextView或EditText属性。 例如 我已经想出如何将这些字符串属性转发到TextView和EditText ,具体地说: TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.LabeledEditText, 0, 0); try { label.setText(a.getString(R.styleable.LabeledEditText_label)); edit.setHint(a.getString(R.styleable.LabeledEditText_hint)); } finally { a.recycle(); } 现在我还想设置EditText的inputType 。 如果我创建一个标记,我是否必须使用所有可能的标记值填充它? 有没有办法重用EditText已经声明的值?

访问片段视图时偶尔会出现NPE

输入片段时偶尔会出现NullPointerException 。 它发生在应用程序在后台很长一段时间然后我打开它并滑动到这个片段。 public class SummaryFragment extends Fragment implements FragmentLifecycle { private static final String TAG = “DTAG”; private DateFormat dateFormatName; private Preference prefs; private List monthList; private TextView totalTimeFullTv; private TextView totalTimeNetTv; private TextView averageTimeTv; private TextView overUnderTv; private TextView minTimeTv; private TextView maxTimeTv; private TextView vacationsTv; private TextView sickTv; private TextView headlineTv; private […]

在通过DPAD进入另一个视图时,Android键盘焦点丢失了

我们在一个布局中有17个api,DPAD控制和4个edittexts用于引脚输入。 当用户尝试打开锁定在应用程序中的某些东西时,他面对片段,他应该输入4位数的针脚。 当打开视图时,我们以编程方式将焦点设置为第一个引脚edittext并显示键盘。 当用户输入第一个引脚数字时,我们将视图焦点设置为第二个引脚edittext,用户应输入第二个引脚值,依此类推。 问题:在用户输入第一个引脚值后, 键盘焦点(突出显示)消失,对于第二个引脚,用户应该再次从键盘开始导航。 21 api相同的代码运行良好, 键盘焦点(突出显示)保持在以前的值。 如何在17 api之前保持键盘焦点(突出显示) ,同时将视图焦点设置在另一个视图上? 这是代码: public class PasswordFragment extends BaseFragment { private final ArrayList disposables = new ArrayList(); @BindViews({R.id.passFirst, R.id.passSecond, R.id.passThird, R.id.passFour}) EditText[] pinEdits; @BindDrawable(R.drawable.border_light) Drawable borderLight; @BindDrawable(R.drawable.border_white) Drawable borderWhite; @Inject PrefsRepo prefsRepo; @Inject ToastUtil toastUtil; @BindView(R.id.passTitle) TextView passTitle; @BindString(R.string.insert_pin) String defDialogMes; private InputMethodManager inputMethodManager; @Override public […]

为什么ButterKnife为@OnClick方法使用DebouncingOnClickListener?

我正在查看生成的ButterKnife代码,并注意到对于@OnClick注释,它使用的是由库实现的DebouncingOnClickListener 。 DebouncingOnClickListener作用是避免在同一帧上使用该侦听器对任何元素进行多次单击(为此,他们使用静态标志)。 你可以在这里看到实现。 我试图find一个解释,为什么他们决定在库管理的每个点击事件中使用它,但找不到任何。 那么,为什么他们使用它呢? 为什么他们决定ButterKnife的每个用户都需要这个? 不应该是决定使用它的用户? 为什么选择视图绑定可以帮助它提供这个“function”? 如果我想在同一帧上多次点击,会发生什么? 我无法使用ButterKnife进行点击活动。 我不假装冒犯,只想要一个解释,也许我错过了什么。

System.gc()导致Activity的第二次启动减慢

我遇到了一个非常奇怪的现象(测试设备:HTC Desire HD,Android 2.3.5)。 我知道System.gc()是不必要的,不鼓励的,我不会尝试另外建议,但重点是它不应该引起问题 (即它最多应该没用)。 我有一个应用程序,在其视图层次结构中包含GLSurfaceView 。 GLSurfaceView被实例化并添加到Activity.onCreate() 。 通常,应用程序的工作方式如下: 用户启动应用程序并转到mainmenu 用户选择一个GLSurfaceView单项,将GLSurfaceView设置为View.VISIBLE 用户在GLSurfaceView上GLSurfaceView内置游戏 用户进入mainmenu并退出活动(=> Activity.finish()被调用) 我的Activity.onPause()看起来像这样: mGameThread.pause(); // gameThread is my custom thread class for the in-built game mGLView.onPause(); // pause the renderer thread 到目前为止一切顺利,一切正常。 但是,在将以下代码添加到onPause()之后会出现问题(对于用户从主菜单退出游戏的情况): mGameThread.pause(); // gameThread is my custom thread class for the in-built game mGLView.onPause(); // pause the renderer thread […]

将滚动发光置于填充之外

我有以下内容: 我添加这个以获得更清晰的UI: android:paddingEnd=”16dp” android:paddingStart=”16dp” 但是,现在滚动条位于填充内部,看起来很时髦。 所以我补充说: android:scrollbarStyle=”outsideInset” 滚动条现在位于填充之外,但是,滚动条仍然在填充内部。 如何让覆盖滚动的光线穿过衬垫? 编辑: 这是遇到与上述相同问题的完整布局代码。

不调用onSaveInstanceState()和onRestoreInstanceState(Parcelable状态)?

我有一个扩展LinearLayout的自定义视图。 我已经实现了onSaveInstanceState()和onRestoreInstanceState()来保存当前的视图状态。 但是,不采取任何行动。 当我在这两种方法中放置一个日志时,Log Cat中也没有任何内容。 我认为这两种方法甚至都没有被调用。 任何人都可以解释问题在哪里? 谢谢。 @Override public Parcelable onSaveInstanceState() { Bundle bundle = new Bundle(); bundle.putParcelable(“instanceState”, super.onSaveInstanceState()); bundle.putInt(“currentPage”, currentPage); return bundle; } @Override public void onRestoreInstanceState(Parcelable state) { if (state instanceof Bundle) { Bundle bundle = (Bundle) state; currentPage = bundle.getInt(“currentPage”); Log.d(“State”, currentPage + “”); super.onRestoreInstanceState(bundle.getParcelable(“instanceState”)); return; } super.onRestoreInstanceState(state); }

Nexus 5x反向横向传感器修复在Android相机预览应用程序中

我是Android开发中的新手,所以如果我的问题很简单,我会提前道歉。 在我的应用程序的一部分中,我需要我的后置摄像头的实时预览,所以我创建了一个自定义类,它扩展了SurfaceView并实现了SurfaceHolder.Callback(我基本遵循了android文档中的说明)。 不幸的是,我在Nexus 5x中测试我的应用程序,我刚刚意识到它已经以相反的方式安装了相机传感器。 出于这个原因,在我的Nexus 5x上运行时,我的应用程序的相机预览显示颠倒,这是我不想要的。 似乎新的android.hardware.camera2 API能够自动处理这个问题。 最终我需要使用这个新API更新我的所有代码,但是现在我需要的是使用旧相机API时的快速修复。 所以我在那里阅读,我发现了一段代码,我需要在SurfaceChanged方法中引入以解决这个问题。 这里是: Display display = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); if(display.getRotation() == Surface.ROTATION_0) { parameters.setPreviewSize(capHeight, capWidth); camera.setDisplayOrientation(90); } if(display.getRotation() == Surface.ROTATION_90) { parameters.setPreviewSize(capWidth, capHeight); } if(display.getRotation() == Surface.ROTATION_180) { parameters.setPreviewSize(capHeight, capWidth); } if(display.getRotation() == Surface.ROTATION_270) { parameters.setPreviewSize(capWidth, capHeight); camera.setDisplayOrientation(180); } camera.setParameters(parameters);*/ camera.startPreview(); 问题是我没有看到某些事情发生了变化。 有什么想法吗?

为什么将ImageView标记为错误?

Android Studio将此行标记为错误: public class ParallaxView extends ImageView 这里的错误: This custom view should extend android.support.v7.widget.AppCompatImageView instead less… (Ctrl+F1) In order to support features such as tinting, the appcompat library will automatically load special appcompat replacements for the builtin widgets. However, this does not work for your own custom views. Instead of extending the android.widget classes directly, […]