Android 文本选择手柄有白色背景(而不是透明的)
Android text selection handles have white background (instead of transparent)
下面的截图显示了我的问题:
文本选择手柄具有白色背景并覆盖其他 UI 元素。如何让背景透明?
或者更好的问题实际上是:我可以做些什么来使背景变白?
这是应用于 EditText
的样式:
<style name="TextInputLayout" parent="AppTheme">
<item name="android:background">@color/grey_50</item>
<item name="colorControlNormal">@color/grey_500</item>
<item name="colorControlActivated">@color/grey_900</item>
<item name="colorControlHighlight">@color/grey_900</item>
<item name="backgroundTint">@color/grey_900</item>
<item name="colorAccent">@color/grey_900</item>
<item name="colorPrimary">@color/grey_900</item>
<item name="android:textCursorDrawable">@null</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/grey_500</item>
<item name="colorPrimaryDark">@color/grey_500</item>
<item name="colorAccent">@color/grey_700</item>
<item name="android:colorBackground">@color/grey_50</item>
<item name="android:colorForeground">@color/grey_900</item>
<item name="android:textColorPrimary">@color/grey_900</item>
<item name="android:textColorPrimaryInverse">@color/grey_50</item>
<item name="android:textColorSecondary">@color/grey_900</item>
<item name="android:textColorSecondaryInverse">@color/grey_50</item>
<item name="android:windowBackground">@color/grey_50</item>
<item name="android:textColorHint">@color/grey_700</item>
<item name="android:colorActivatedHighlight">@color/grey_900</item>
<item name="colorControlNormal">@color/grey_700</item>
<item name="colorControlActivated">@color/grey_900</item>
<item name="colorControlHighlight">@color/grey_900</item>
<item name="android:textColorHighlight">@color/grey_500</item>
<item name="android:colorControlNormal" tools:targetApi="lollipop">@color/grey_700</item>
<item name="android:colorControlActivated" tools:targetApi="lollipop">@color/grey_900</item>
<item name="android:colorControlHighlight" tools:targetApi="lollipop">@color/grey_900</item>
<item name="android:stateListAnimator" tools:targetApi="lollipop">@null</item>
<item name="android:statusBarColor" tools:targetApi="lollipop">@color/grey_900</item>
<item name="android:navigationBarColor" tools:targetApi="lollipop">@color/grey_900</item>
</style>
编辑#1
EditText 的 XML(请注意,我看到 EditText
s 和 AppCompatEditText
s 的行为相同):
<android.support.design.widget.TextInputLayout
android:id="@+id/input_layout_home_autocomplete"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_horizontal_margin_small"
android:layout_marginTop="@dimen/activity_horizontal_margin_small"
android:layout_weight="3.5"
android:background="@null"
android:hint="@string/location"
android:padding="@dimen/activity_vertical_margin_medium"
android:theme="@style/TextInputLayout"
app:hintAnimationEnabled="true"
app:hintEnabled="true"
app:hintTextAppearance="@style/TextAppearance.TextInputLayout">
<AutoCompleteTextView
android:id="@+id/user_home_autocomplete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="3.5"
android:dropDownWidth="match_parent"
android:inputType="textAutoComplete"
android:maxLines="1"
android:paddingTop="@dimen/activity_horizontal_margin_small" />
</android.support.design.widget.TextInputLayout>
我用于屏幕截图的 Phone 使用 OxygenOS 3.2.7
运行 Android 6.0.1
删除所有 @null
元素无效。
根据 android 文档,主题应用于整个 activity 或应用程序布局中使用的视图。对于布局中的个别视图,我们需要应用样式。
参考:https://developer.android.com/guide/topics/ui/themes.html
主题作为通用样式应用于 activity 或应用程序中的所有视图。
请设置视图的背景:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="YOUR_CUSTOM_COLOR" />
<item android:state_selected="true" android:color="#80000000" />
<item android:color="YOUR_CUSTOM_COLOR" />
</selector>
试试这个可能对你有帮助
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Pressed State -->
<item android:state_pressed="true"
android:color="#FFFFFF" />
<!-- Focused State -->
<item android:state_focused="true"
android:color="#FFFFFF" /> <!-- use background color here -->
<!-- Default State -->
<item android:color="#000000" />
</selector>
将此 属性 设置为您的编辑文本的背景
如果您在主主题中设置背景颜色,可能会发生这种情况,例如
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="android:background">@color/white</item>
...
</style>
删除此 属性 为我解决此问题,如果您想为所有屏幕设置背景,请改为设置 windowBackground。
<item name="android:windowBackground">@color/white</item>
将其从您的主题中删除<item name="android:popupBackground">????</item>
发生这种情况是因为您将背景设置为样式的一部分,并将 android:theme="@style/TextInputLayout"
声明为主题而不是样式。
这使得该视图的子视图具有相同的行为,包括文本选择处理程序。
将此行<item name="android:background">@color/grey_50</item>
移出样式。
下面的截图显示了我的问题:
文本选择手柄具有白色背景并覆盖其他 UI 元素。如何让背景透明?
或者更好的问题实际上是:我可以做些什么来使背景变白?
这是应用于 EditText
的样式:
<style name="TextInputLayout" parent="AppTheme">
<item name="android:background">@color/grey_50</item>
<item name="colorControlNormal">@color/grey_500</item>
<item name="colorControlActivated">@color/grey_900</item>
<item name="colorControlHighlight">@color/grey_900</item>
<item name="backgroundTint">@color/grey_900</item>
<item name="colorAccent">@color/grey_900</item>
<item name="colorPrimary">@color/grey_900</item>
<item name="android:textCursorDrawable">@null</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/grey_500</item>
<item name="colorPrimaryDark">@color/grey_500</item>
<item name="colorAccent">@color/grey_700</item>
<item name="android:colorBackground">@color/grey_50</item>
<item name="android:colorForeground">@color/grey_900</item>
<item name="android:textColorPrimary">@color/grey_900</item>
<item name="android:textColorPrimaryInverse">@color/grey_50</item>
<item name="android:textColorSecondary">@color/grey_900</item>
<item name="android:textColorSecondaryInverse">@color/grey_50</item>
<item name="android:windowBackground">@color/grey_50</item>
<item name="android:textColorHint">@color/grey_700</item>
<item name="android:colorActivatedHighlight">@color/grey_900</item>
<item name="colorControlNormal">@color/grey_700</item>
<item name="colorControlActivated">@color/grey_900</item>
<item name="colorControlHighlight">@color/grey_900</item>
<item name="android:textColorHighlight">@color/grey_500</item>
<item name="android:colorControlNormal" tools:targetApi="lollipop">@color/grey_700</item>
<item name="android:colorControlActivated" tools:targetApi="lollipop">@color/grey_900</item>
<item name="android:colorControlHighlight" tools:targetApi="lollipop">@color/grey_900</item>
<item name="android:stateListAnimator" tools:targetApi="lollipop">@null</item>
<item name="android:statusBarColor" tools:targetApi="lollipop">@color/grey_900</item>
<item name="android:navigationBarColor" tools:targetApi="lollipop">@color/grey_900</item>
</style>
编辑#1
EditText 的 XML(请注意,我看到 EditText
s 和 AppCompatEditText
s 的行为相同):
<android.support.design.widget.TextInputLayout
android:id="@+id/input_layout_home_autocomplete"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_horizontal_margin_small"
android:layout_marginTop="@dimen/activity_horizontal_margin_small"
android:layout_weight="3.5"
android:background="@null"
android:hint="@string/location"
android:padding="@dimen/activity_vertical_margin_medium"
android:theme="@style/TextInputLayout"
app:hintAnimationEnabled="true"
app:hintEnabled="true"
app:hintTextAppearance="@style/TextAppearance.TextInputLayout">
<AutoCompleteTextView
android:id="@+id/user_home_autocomplete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="3.5"
android:dropDownWidth="match_parent"
android:inputType="textAutoComplete"
android:maxLines="1"
android:paddingTop="@dimen/activity_horizontal_margin_small" />
</android.support.design.widget.TextInputLayout>
我用于屏幕截图的 Phone 使用 OxygenOS 3.2.7
运行 Android 6.0.1删除所有 @null
元素无效。
根据 android 文档,主题应用于整个 activity 或应用程序布局中使用的视图。对于布局中的个别视图,我们需要应用样式。
参考:https://developer.android.com/guide/topics/ui/themes.html
主题作为通用样式应用于 activity 或应用程序中的所有视图。
请设置视图的背景:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="YOUR_CUSTOM_COLOR" />
<item android:state_selected="true" android:color="#80000000" />
<item android:color="YOUR_CUSTOM_COLOR" />
</selector>
试试这个可能对你有帮助
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Pressed State -->
<item android:state_pressed="true"
android:color="#FFFFFF" />
<!-- Focused State -->
<item android:state_focused="true"
android:color="#FFFFFF" /> <!-- use background color here -->
<!-- Default State -->
<item android:color="#000000" />
</selector>
将此 属性 设置为您的编辑文本的背景
如果您在主主题中设置背景颜色,可能会发生这种情况,例如
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="android:background">@color/white</item>
...
</style>
删除此 属性 为我解决此问题,如果您想为所有屏幕设置背景,请改为设置 windowBackground。
<item name="android:windowBackground">@color/white</item>
将其从您的主题中删除<item name="android:popupBackground">????</item>
发生这种情况是因为您将背景设置为样式的一部分,并将 android:theme="@style/TextInputLayout"
声明为主题而不是样式。
这使得该视图的子视图具有相同的行为,包括文本选择处理程序。
将此行<item name="android:background">@color/grey_50</item>
移出样式。