在Android开发中如何移除EditText上的输入焦点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Android开发中如何移除EditText上的输入焦点相关的知识,希望对你有一定的参考价值。
//------阻止EditText得到焦点,以防输入法弄丑画面textView1.setFocusable(true);
textView1.setFocusableInTouchMode(true);
textView1.requestFocus(); // 初始不让EditText得焦点
textView1.requestFocusFromTouch();
// 让焦点指到任一个textView1中 参考技术A 其实吧,把editText的cursorVisible设为false就行这样只是把光标去掉了,并不能移除焦点。本文介绍的这个方法很好本回答被提问者采纳
棒棒糖设备上的 EditText 没有以强调色着色
【中文标题】棒棒糖设备上的 EditText 没有以强调色着色【英文标题】:EditText not tinted in Accent color on lollipop devices 【发布时间】:2015-10-08 08:02:12 【问题描述】:我是软件工程专业的学生,几个月前在业余时间开始学习 android 开发。
目前我正在制作我的第一个应用程序,同时在学习过程中遇到了问题。
我正在使用 DialogFragment,出于某种原因,我在主题中使用的强调色仅在棒棒糖之前的设备(模拟器和物理设备)中被覆盖。
您会注意到棒棒糖中只有浮动提示被着色。
我的 DialogFragment 布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_add_container"
android:layout_
android:layout_
android:orientation="vertical">
<android.support.design.widget.TextInputLayout
android:id="@+id/input_title_layout"
android:layout_
android:layout_>
<EditText
android:id="@+id/input_title"
android:layout_
android:layout_
android:layout_margin="16dp"
android:hint="@string/dialog_add_title_hint"
android:imeOptions="actionNext"
android:inputType="text"
android:singleLine="true" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/input_password_layout"
android:layout_
android:layout_>
<EditText
android:id="@+id/input_password"
android:layout_
android:layout_
android:layout_margin="16dp"
android:hint="@string/dialog_add_password_hint"
android:imeOptions="actionGo"
android:inputType="text"
android:singleLine="true" />
</android.support.design.widget.TextInputLayout>
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal">
<Button
android:id="@+id/input_cancel"
style="?attr/buttonBarButtonStyle"
android:layout_
android:layout_
android:layout_margin="16dp"
android:layout_weight="1"
android:text="Cancel" />
<Button
android:id="@+id/input_confirm"
style="?attr/buttonBarButtonStyle"
android:layout_
android:layout_
android:layout_margin="16dp"
android:layout_weight="1"
android:text="Add" />
</LinearLayout>
我的价值观/styles.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="colorControlHighlight">@color/colorHighlight</item>
<!-- Context Action Mode will Overlay Toolbar -->
<item name="windowActionModeOverlay">true</item>
</style>
我已经尝试了几种解决方案都无济于事:
-
覆盖 colorControlActivated 和 colorControlNormal - 仅更改浮动提示色调
以编程方式更改色调,但这只会更改下划线而不是聚焦:
可绘制背景 = InputTextLayout.getEditText().getBackground(); DrawableCompat.setTint(背景, yourColor); InputTextLayout.getEditText().setBackground(background);
单独使用 EditText,不包含在 TextInputLayout 中,也无济于事。
有什么想法吗?
提前致谢
【问题讨论】:
您使用的是什么版本的设计支持库? 我使用的是 23.0.1 版本 【参考方案1】:在通过互联网进行彻底搜索后,我在 *** 中偶然发现了一个关于为 DialogFragment 设置动画的问题 - here
该链接中的答案引用了一位 Google 工程师的帖子:
...DialogFragment 只是一个 Dialog 的包装器,用于帮助管理其生命周期。对话框是***窗口,因此它们的动画是窗口动画,就像在所有其他情况下使用 Dialog 时一样。因此,您可以通过 主题 或在其 WindowManager.LayoutParams 中设置的显式窗口动画样式来控制对话框的动画。
所以我决定检查如何为 DialogFragment 设置主题 并通过 CodePath 找到本指南 - here
基本上,在您的应用主题中,为了覆盖对话框主题,您必须添加以下内容:
<style name="AppTheme" parent...>
....
<!-- this will override DialogFragment theme -->
<item name="android:dialogTheme">@style/MyDialogFragmentTheme</item>
<!-- this will override AlertDialog theme -->
<item name="android:alertDialogTheme">@style/MyAlertDialogTheme</item>
</style>
<style name="CustomAlertDialogTheme.Animation">
...
</style>
<style name="MyDialogFragmentTheme" parent="Theme.AppCompat.Light.Dialog">
...
</style>
在每个主题中,您都可以覆盖 colorPrimary、colorAccent 等属性。
如果使用此方法使您的 DialogFragment 显示为没有标题(这发生在我身上),则将以下内容添加到其样式中:
<item name="android:windowNoTitle">false</item>
奖励 - 添加动画
要向 AlertDialog 或 DialogFragment 添加动画,请在其样式中编写以下内容:
<style name="MyDialogFragmentTheme" parent="Theme.AppCompat.Light.Dialog">
...
<item name="android:windowAnimationStyle">@style/MyDialogFragmentTheme.Animation</item>
</style>
那么你需要为动画创建一个样式,例如:
<style name="MyDialogFragmentTheme.Animation">
<item name="android:windowEnterAnimation">@anim/dialog_slide_in_up</item>
<item name="android:windowExitAnimation">@anim/dialog_slide_out_down</item>
<item name="android:interpolator">@android:interpolator/anticipate</item>
</style>
上面链接的 CodePath 指南中有更多信息。
请注意,这一切都发生在 values/styles.xml 中
希望这对其他人有所帮助。
【讨论】:
以上是关于在Android开发中如何移除EditText上的输入焦点的主要内容,如果未能解决你的问题,请参考以下文章
如何在xamarin android的MainActivity上的dialogFragment中显示editText的文本?
如何使数字的android edittext类似于DatePickerDialog上的向上/向下按钮?