【问题标题】:Android Textview background color resourceAndroid Textview 背景颜色资源
【发布时间】:2011-06-07 13:16:29
【问题描述】:

我有一个listView。 custom_listitem1.xml 用于列表中显示的项目。现在我想为项目的背景设置基于Selector 的颜色资源(list_selector_color.xml)。

custom_listitem1.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:textSize="18sp"
    android:textStyle="bold"
    android:background="@color/list_selector_color"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center_vertical"
    android:paddingLeft="6dip"
    android:minHeight="?android:attr/listPreferredItemHeight"/>

list_selector_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:color="#ffff0000"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#ff0000ff"/> <!-- focused -->
    <item android:color="#ff000000"/> <!-- default -->
</selector>

但它给出了以下错误.....

06-06 18:38:19.422: ERROR/AndroidRuntime(18603): Uncaught handler: thread main exiting due to uncaught exception
06-06 18:38:19.445: ERROR/AndroidRuntime(18603): android.view.InflateException: Binary XML file line #1: Error inflating class <unknown>
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.LayoutInflater.createView(LayoutInflater.java:513)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.LayoutInflater.inflate(LayoutInflater.java:385)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.ResourceCursorAdapter.newView(ResourceCursorAdapter.java:79)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.SimpleCursorAdapter.newView(SimpleCursorAdapter.java:96)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.CursorAdapter.getView(CursorAdapter.java:182)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.AbsListView.obtainView(AbsListView.java:1274)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.ListView.makeAndAddView(ListView.java:1668)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.ListView.fillDown(ListView.java:637)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.ListView.fillFromTop(ListView.java:694)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.ListView.layoutChildren(ListView.java:1521)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.AbsListView.onLayout(AbsListView.java:1113)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.View.layout(View.java:6830)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1108)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.LinearLayout.onLayout(LinearLayout.java:920)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.View.layout(View.java:6830)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.View.layout(View.java:6830)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.View.layout(View.java:6830)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.View.layout(View.java:6830)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.View.layout(View.java:6830)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.View.layout(View.java:6830)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.View.layout(View.java:6830)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.View.layout(View.java:6830)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.View.layout(View.java:6830)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.View.layout(View.java:6830)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.ViewRoot.performTraversals(ViewRoot.java:996)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.os.Looper.loop(Looper.java:123)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.app.ActivityThread.main(ActivityThread.java:4363)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at java.lang.reflect.Method.invokeNative(Native Method)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at java.lang.reflect.Method.invoke(Method.java:521)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at dalvik.system.NativeStart.main(Native Method)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603): Caused by: java.lang.reflect.InvocationTargetException
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.TextView.<init>(TextView.java:329)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at java.lang.reflect.Constructor.constructNative(Native Method)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.LayoutInflater.createView(LayoutInflater.java:500)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     ... 52 more
06-06 18:38:19.445: ERROR/AndroidRuntime(18603): Caused by: android.content.res.Resources$NotFoundException: File res/color/list_selector_color.xml from drawable resource ID #0x7f070000
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.content.res.Resources.loadDrawable(Resources.java:1693)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.content.res.TypedArray.getDrawable(TypedArray.java:548)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.view.View.<init>(View.java:1850)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     at android.widget.TextView.<init>(TextView.java:335)
06-06 18:38:19.445: ERROR/AndroidRuntime(18603):     ... 56 more
06-06 18:38:19.445: ERROR/AndroidRuntime(18603): Caused by: org.xmlpul

我的代码有什么问题?

【问题讨论】:

  • 您在项目中放置 list_selector_color.xml 文件的位置。
  • 我建议将“list_selector_color.xml”放在 res/drawable 文件夹中。如果不存在,请先在 res 目录下创建“drawable”文件夹。

标签: android background textview selector


【解决方案1】:

您不能使用颜色选择器作为背景。您可以改用可绘制选择器:

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

    <item android:state_pressed="true">
        <shape>
            <solid android:color="#ffff0000"/>
        </shape>
    </item><!-- pressed -->

    <item android:state_focused="true">
        <shape>
            <solid android:color="#ff0000ff"/>
        </shape>
    </item><!-- focused -->

    <item>
        <shape>
            <solid android:color="#ff000000"/>
        </shape>
    </item><!-- default -->

</selector>

您必须将其放入drawable/ 文件夹而不是color/ 并以身份访问

android:background="@drawable/list_selector_color"

【讨论】:

  • 老兄!我从没想过在 标签中创建形状!你是个天才。我一直讨厌我不能直接在 标签中使用 android:color,因此我总是会为每个 ! 创建单独的文件
【解决方案2】:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/background"//color 1
>
<TextView
    android:id="@+id/tvheader"
    android:layout_width="300dip"
    android:layout_height="wrap_content"
    android:background="#EC7703"
    android:textColor="#000000"
    android:text="  Edit Items" />
    />
<TextView
    android:id="@+id/tvsl"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:background="@color/translucent_red"//color 2
    />
    <LinearLayout android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/background">
         <EditText
        android:id="@+id/txtsl"
        android:maxLines="1"
        android:layout_marginTop="3dip"
        android:layout_marginBottom="2dip"
        android:layout_width="wrap_content"
        android:ems="20"
        android:layout_height="wrap_content"/>
    </LinearLayout>
   <TextView
    android:id="@+id/tvname"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:background="@color/background"
    />
    <LinearLayout android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/row">
    <Spinner 
            android:id="@+id/txtname"
            android:layout_width="200dip"
            android:layout_height="wrap_content"
            android:drawSelectorOnTop="true"
            android:prompt="@string/medicine_info"
            android:layout_toRightOf="@id/slcolon"
            />
    </LinearLayout>
    <TextView
    android:id="@+id/tvqty"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:background="@color/background"
    />
    <LinearLayout android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/background">
    <EditText
    android:id="@+id/txtqty"
    android:maxLines="1"
    android:layout_marginTop="3dip"
    android:gravity="right"
    android:layout_marginBottom="2dip"
    android:layout_width="wrap_content"
    android:ems="20"
    android:layout_height="wrap_content"/>
    </LinearLayout>
    <TextView
    android:id="@+id/tvuom"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:background="@color/background"
    />
    <LinearLayout android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/background">
    <EditText
    android:id="@+id/txtuom"
    android:maxLines="1"
    android:layout_marginTop="3dip"
    android:layout_marginBottom="2dip"
    android:layout_width="wrap_content"
    android:ems="20"
    android:layout_height="wrap_content"/>
    </LinearLayout>
    <TableLayout
         android:layout_height="wrap_content"
         android:layout_width="wrap_content"
         android:background="@color/background"
         android:layout_gravity="center"
         android:stretchColumns="*" >
   <TableRow>
    <Button
       android:id="@+id/Btnok"
       android:text="Edit" />
    <Button
       android:id="@+id/Btndelete"
       android:text="Delete" />
    <Button
       android:id="@+id/Btncancel"
       android:text="Cancel" />
   </TableRow>
   </TableLayout>
   <LinearLayout android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="40dip"
        android:background="#F7BE57">//collor change by using color code
         <TextView
            android:id="@+id/maincolon"
            android:layout_width="wrap_content"
            android:layout_height="40dip"
            android:text="                    " />
         <TextView
            android:id="@+id/tvprovider"
            android:layout_width="wrap_content"
            android:layout_height="40dip"
            android:textColor="#000000"
            android:text="Provider : Softworks"
         />
     </LinearLayout>
</LinearLayout>

【讨论】:

  • 我需要在同一视图的不同状态(例如按下、聚焦)下使用不同的颜色。让默认颜色为黑色,按下时为黄色,若对焦为红色。你的代码怎么可能?
【解决方案3】:

您将 list_selector_color.xml 存储在哪里? 如果它在 res/color 中,请尝试将其重新定位到 res/drawable 并像android:background="@drawable/list_selector_color"一样打电话

【讨论】:

  • 这不起作用 - list_selector_color.xml 文件会导致运行时错误,因为如果从可绘制文件夹中提取每个 都需要设置 android:drawable 属性。拥有 android:color 集是不够的。 :\
【解决方案4】:

您需要在 ...\res\values\color.xml 项目目录中创建color.xml
样本color.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="background">#1474c0</color>
<color name="row">#ff0000</color>
<color name="translucent_red">#ff0000</color>
</resources>

那么如何使用颜色呢?请看这个例子并添加一行+++++++ 示例 main.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
    android:layout_height="wrap_content"
+++++++android:background="@color/translucent_red">
<ListView android:id="@+id/android:list"
      android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
<TextView android:id="@+id/android:empty"
      android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="No Notes!"/>
</LinearLayout>

【讨论】:

  • 我想在 TextView 的不同状态(例如按下、聚焦)下显示不同的颜色。怎么可能以你的方式?
【解决方案5】:

是的,如果您将每个 textview 定义到每个 LinearLayout 中,那么它可以工作。

【讨论】:

  • 您能否提供一些代码示例,我们如何在不同的状态(例如按下、聚焦)为 LinearLayout 设置不同的颜色?
【解决方案6】:

现在我明白你的意思了。请看下面的例子

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:id="@+id/topField" android:layout_weight="2.5"
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:background="@drawable/topField_design" 
    android:orientation="horizontal" >
    <EditText android:id="@+id/digitsText" android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1" android:maxLines="1" android:scrollHorizontally="true"
        android:textSize="28sp" android:freezesText="true" android:background="#F7BE57"
        android:layout_margin="0dip"
        android:contentDescription="description"
        android:focusableInTouchMode="true" android:editable="true" android:cursorVisible="false" />
</LinearLayout>

现在“topField_design.xml”是一个drowable资源xml文件,包含drowable图像资源。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" 
    android:drawable="@drawable/btn_dial_textfield_pressed" />
<item android:state_focused="true"
    android:drawable="@drawable/btn_dial_textfield_selected" />
<item
    android:drawable="@drawable/btn_dial_textfield_normal" />//btn_dial_textfield_normal is a .png image resource into drowable folder "btn_dial_textfield_normal.png"
</selector>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多