TextView的颜色在带有ConstraintLayout的真实设备上显示为白色

我一直在用ConstraintLayout ,到目前为止,除了现在遇到一个特殊的问题之外,我已经非常喜欢它 。 相同的布局,如果我devise使用RelativeLayout显示包含的TextView的颜色作为默认的文本颜色(灰色),但与ConstraintLayout ,它显示白色。

这发生在一个真实的设备以及与Android 5.0仿真器,但不是仿真器(7.0)。 有谁知道,为什么会发生这种情况?

此外,显而易见的解决scheme似乎是在布局中将TextView的颜色手动设置为它应该是的样式,但是这似乎是一种解决scheme。 我有兴趣知道,为什么这首先发生,如果这个黑客是唯一的解决scheme ? ( 我更喜欢不通过在TextView上强制颜色来修复它,因为在Android 7.0上的行为是正确的

编辑:忘了提及布局编辑器显示他们都黑/灰,这也是一个提示,实际的颜色不应该是白色的。


为了您的参考,这里是大致相同的两个布局( 其中一个是Button ,另一个是TextView而不是Button ),其中一个是错误的。

显示为白色的布局(焦点问题):

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="4dp" android:layout_marginBottom="4dp" android:layout_marginLeft="8dp" android:layout_marginStart="8dp" android:layout_marginRight="8dp" android:layout_marginEnd="8dp" android:background="@color/lightGrey"> <android.support.constraint.ConstraintLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:paddingBottom="10dp" android:elevation="2dp" android:id="@+id/constraintLayout"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintTop_toTopOf="parent" android:layout_marginLeft="16dp" android:layout_marginStart="16dp" android:layout_marginTop="16dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@+id/guideline" android:layout_marginRight="8dp" android:layout_marginEnd="8dp" app:layout_constraintHorizontal_bias="0.0" android:id="@+id/linearLayout" tools:layout_editor_absoluteY="16dp"> <TextView android:text="@string/tutor_name" android:textStyle="bold" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tutor_name"/> <TextView android:text="@string/tutor_skill_set" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:id="@+id/skill_set"/> <TextView android:text="@string/tutor_types" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:id="@+id/tutor_types" /> <TextView android:text="@string/tutor_location" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/location" android:layout_marginTop="12dp" /> </LinearLayout> <ImageView android:id="@+id/display_pic" android:layout_width="80dp" android:layout_height="80dp" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_marginEnd="16dp" android:layout_marginLeft="8dp" android:layout_marginRight="16dp" android:layout_marginStart="8dp" android:layout_marginTop="16dp" android:adjustViewBounds="false" android:scaleType="centerCrop" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintLeft_toLeftOf="@+id/guideline" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@android:color/holo_red_light" /> <com.iarcuschin.simpleratingbar.SimpleRatingBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tutor_rating" android:layout_below="@+id/display_pic" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" app:srb_starSize="13dp" app:srb_numberOfStars="5" app:srb_borderColor="@color/colorAccent" app:srb_fillColor="@color/colorPrimary" app:srb_starBorderWidth="1" app:srb_isIndicator="true" app:layout_constraintRight_toRightOf="@+id/display_pic" android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/display_pic" android:layout_marginLeft="8dp" android:layout_marginStart="8dp" app:layout_constraintLeft_toLeftOf="@+id/guideline" app:layout_constraintHorizontal_bias="1.0" /> <android.support.constraint.Guideline android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/guideline" android:orientation="vertical" app:layout_constraintGuide_percent="0.6796875" /> </android.support.constraint.ConstraintLayout> <TextView android:id="@+id/tutor_requested_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="32dp" android:text="Requested time" android:textStyle="italic" android:layout_marginStart="32dp" android:layout_marginBottom="8dp" android:layout_below="@+id/constraintLayout" /> </RelativeLayout> 

显示黑色/灰色的布局(默认为应该是)

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginStart="10dp" android:layout_marginRight="10dp" android:layout_marginEnd="10dp" android:background="@color/lightGrey" android:layout_marginBottom="10dp" android:layout_marginTop="10dp" android:elevation="2dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:paddingBottom="10dp" android:paddingEnd="10dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingStart="10dp" android:paddingTop="10dp"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:weightSum="1" android:layout_toLeftOf="@+id/display_pic" android:layout_toStartOf="@+id/display_pic" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" android:id="@+id/linearLayout2"> <TextView android:text="@string/tutor_name" android:textStyle="bold" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tutor_name"/> <TextView android:text="@string/tutor_skill_set" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:id="@+id/skill_set"/> <TextView android:text="@string/tutor_types" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:id="@+id/tutor_types" /> <TextView android:text="@string/tutor_location" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/location" android:layout_marginTop="12dp" /> </LinearLayout> <ImageView android:id="@+id/display_pic" android:layout_width="80dp" android:layout_height="80dp" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:adjustViewBounds="false" android:scaleType="centerCrop" app:srcCompat="@android:color/holo_red_light" /> <com.iarcuschin.simpleratingbar.SimpleRatingBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tutor_rating" android:layout_below="@+id/display_pic" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" app:srb_starSize="13dp" app:srb_numberOfStars="5" app:srb_borderColor="@color/colorAccent" app:srb_fillColor="@color/colorPrimary" app:srb_starBorderWidth="1" app:srb_isIndicator="true" android:layout_marginTop="2dp" /> <Button android:id="@+id/request_tutor" style="@android:style/Widget.Button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_below="@+id/linearLayout2" android:layout_marginTop="14dp" android:background="@color/lighterGrey" android:minHeight="25dp" android:minWidth="80dp" android:text="Request" android:textAppearance="@style/TextAppearance.AppCompat" /> </RelativeLayout> </FrameLayout> 

注意:尽pipe我尝试使用下面的Barrier,但它是在ConstraintLayout 1.1.0 beta版本中的,在这种情况下,我会严格禁止使用beta版本进行生产)

编辑2:继@ @ rami-jemli的build议,这里是与问题依然存在的障碍ConstraintLayout

 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="4dp" android:layout_marginBottom="4dp" android:layout_marginLeft="8dp" android:layout_marginStart="8dp" android:layout_marginRight="8dp" android:layout_marginEnd="8dp" android:background="@color/lightGrey" android:id="@+id/constraintLayout"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintTop_toTopOf="parent" android:layout_marginLeft="16dp" android:layout_marginStart="16dp" android:layout_marginTop="16dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@+id/guideline" android:layout_marginRight="8dp" android:layout_marginEnd="8dp" app:layout_constraintHorizontal_bias="0.0" android:id="@+id/linearLayout"> <TextView android:text="@string/tutor_name" android:textStyle="bold" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tutor_name"/> <TextView android:text="@string/tutor_skill_set" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:id="@+id/skill_set"/> <TextView android:text="@string/tutor_types" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:id="@+id/tutor_types" /> <TextView android:text="@string/tutor_location" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/location" android:layout_marginTop="12dp" /> </LinearLayout> <ImageView android:id="@+id/display_pic" android:layout_width="80dp" android:layout_height="80dp" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_marginEnd="16dp" android:layout_marginLeft="8dp" android:layout_marginRight="16dp" android:layout_marginStart="8dp" android:layout_marginTop="16dp" android:adjustViewBounds="false" android:scaleType="centerCrop" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintLeft_toLeftOf="@+id/guideline" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@android:color/holo_red_light" /> <com.iarcuschin.simpleratingbar.SimpleRatingBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tutor_rating" android:layout_below="@+id/display_pic" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" app:srb_starSize="13dp" app:srb_numberOfStars="5" app:srb_borderColor="@color/colorAccent" app:srb_fillColor="@color/colorPrimary" app:srb_starBorderWidth="1" app:srb_isIndicator="true" app:layout_constraintRight_toRightOf="@+id/display_pic" android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/display_pic" android:layout_marginLeft="8dp" android:layout_marginStart="8dp" app:layout_constraintLeft_toLeftOf="@+id/guideline" app:layout_constraintHorizontal_bias="1.0" /> <android.support.constraint.Guideline android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/guideline" android:orientation="vertical" app:layout_constraintGuide_percent="0.6796875" tools:layout_editor_absoluteY="0dp" tools:layout_editor_absoluteX="250dp" /> <TextView android:id="@+id/tutor_requested_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Requested time" android:textStyle="italic" android:layout_below="@+id/constraintLayout" android:layout_marginTop="8dp" app:layout_constraintTop_toTopOf="@+id/barrier" app:layout_constraintStart_toStartOf="@+id/linearLayout" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="8dp" /> <android.support.constraint.Barrier android:id="@+id/barrier" android:layout_width="wrap_content" android:layout_height="wrap_content" app:barrierDirection="bottom" app:constraint_referenced_ids="tutor_rating,linearLayout" tools:layout_editor_absoluteY="126dp" /> </android.support.constraint.ConstraintLayout> 

输出:(虚拟数据)

在这里输入图像说明

Solutions Collecting From Web of "TextView的颜色在带有ConstraintLayout的真实设备上显示为白色"

我无法相信这! 我find了答案。

从这个问题,不可能指出什么可能是错误的,因为问题不是与布局RecyclerViewAppCompatConstraintLayout 。 问题是所谓的主题背景 。 在几乎所有情况下,我一直在传递应用程序上下文,但事实certificate布局是关心的,build议传入Activity实例本身( 这是一个ContextThemeWrapper上下文,因为它扩展了ContextThemeWrapper稍后再介绍 )。

所以,例如,当我们为一个RecyclerView实例化一个LayoutManager ,我们会传入一个Activity实例。 当我们为RecyclerView膨胀一个布局项目时,我们将再次使用Activity

在这种情况下, ContextThemeWrapper按照此处所述进行概念优先,并将其子类化。

还提到的是,

ContextThemeWrapper将应用您的应用程序主题

我上面分享的代码片段并没有立即清楚,但是,您可以编写自己的testing来validation这一点。 我能想到的最好的方法是创build一个简单的应用程序与ListView使用android.R.layout.simple_list_item_1显示项目。 使您的应用程序主题Light默认,然后使用getApplicationContext()初始化您的ArrayAdapter 。 您会注意到文字不可见或几乎不可见,因为默认情况下它会变成白色,而您的主题应该调用默认文字为黑色。 更改代码,以便您的代码使用“this”(即Activity )或简单的getContext()初始化arrays适配器,您将看到文本变成黑色。

和,

不要LayoutInflater 使用 getApplicationContext() ,除非你真的想要忽略你的主题。


关于@Sockeqwe的关于他在SwitchCompat上的回答 ,给了我这个想法。

注:以前,我曾经提到这可能是ConstraintLayout一个错误。 我回过头来,向在ConstraintLayout工作的人道歉( 我发现这真是太棒了!

最后,感谢所有的人们,他们花费宝贵的时间来阅读我的问题,并激发他们的智慧来回答。

你现在使用ConstraintLayout的方式是错误的。 你没有得到它的性能好处。 不需要所有其他ViewGroups(RelativeLayout等)和嵌套的布局。
在你的情况下,你只需要使用一个ConstraintLayout作为没有嵌套级别的父级布局。
使用Chains而不是LinearLayout
尝试实现这一点,并用新的代码更新你的问题。
让我们看看你得到什么。