2017-12-18 204 views
0

我尝试使用三元运算符来更改按钮的文本颜色。 类似的东西:这里是xml。数据绑定设置颜色

<Button 
    android:id="@+id/actionButton" 
    android:layout_width="113dp" 
    android:layout_height="30dp" 
    android:background="@drawable/button" 
    android:backgroundTint="@{selected ? R.color.white : R.color.turquoise}" 
    android:text="@{selected ? &quot;Selected &quot; : &quot;Select &quot;}" 
    android:textColor="@{selected ? @color/white : @color/turquoise}" 
    android:onClick="@{(view) -> handler.selectClick(view)}"/> 

但颜色设置不正确。我得到一些奇怪的紫色颜色。

我试图

<import type="com.myapp.R" /> 
android:textColor="@{selected ? R.color.white : R.color.turquoise}" 

具有相同的结果。
我应该怎么做?

+0

你绿松石色哟检查你设置正确的颜色代码? –

+0

是的。颜色很好。 android:textColor =“@ color/turquoise”根据需要工作 – Shmuel

回答

0

您的第一个变体应该可以正常工作。您可以参考this doc的“资源”一章。 这是一个完整的工作示例。

colors.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    ... 
    <color name="foo">#fff</color> 
    <color name="bar">#000</color> 
</resources> 

main_activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 

    <data> 
     <variable name="selected" type="boolean" /> 
     <variable name="button2" type="String" /> 
    </data> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/btn_a" 
      android:onClick="switchColor" 
      android:text="Click me"/> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/btn_b" 
      android:textColor="@{selected ? @color/foo : @color/bar}" 
      android:text="@{button2}"/> 

    </LinearLayout> 
</layout> 

ActivityMain.class

public class ActivityMain extends AppCompatActivity { 

    public static final String TAG = "MainActivity"; 

    MainActivityBinding mBinding; 
    boolean mSelected; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mBinding = DataBindingUtil.setContentView(this, R.layout.main_activity); 
     mBinding.setButton2("Don't click me please!"); 
    } 

    public void switchColor(View view) { 
     mBinding.setSelected(mSelected = !mSelected); 
    } 
}