Android - 我可以通过编程方式覆盖simple_list_item_1颜色吗?

时间:2013-12-31 02:30:08

标签: java android xml

编辑:我决定继续使用自定义xml进行小改动以使选择颜色有效。这并不能完全解决我的问题,但我不想花钱现在有更多时间。在下面发布我当前的xml,以防它帮助某人,并标记正确的答案,因为它帮助我几乎实现了我的目标。如果我使用?android:attr/selectableItemBackground

,我最终不需要指向另一个xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical|center_horizontal"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/black" 
    android:background="?android:attr/selectableItemBackground" />

我使用GridViewDialog包裹在ArrayAdapter中。

我希望在细胞之间有一些边界(1dp白色或黑色)。我能够完成此任务的唯一方法是编写一个自定义xml并使用它而不是simple_list_item_1,这样就可以了,除了这似乎打破了选择等项目突出显示,我似乎无法匹配默认值用我的自定义xml看看它。

问题:我是否可以找到并覆盖内置xml的配色方案?

我在下面的代码中做了一个小小的尝试,但不出所料我得到了一个空指针异常。大多数搜索只是提出了自定义xml的建议,但为快速字体颜色和字体背景颜色变化做这一切似乎很奇怪。

为了以防万一,我会投入我的xmls。 如果重要,请使用最低API 11。

谢谢你们,

麦克

-Java Snippet -

...

public void gridDialog(View v) {

    String[] letters = new String[] { 
        "A", "B", "C", "D", "E"};

    final Dialog dialog = new Dialog(context);

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.grid_pop);

    GridView mGrid = (GridView) dialog.findViewById(R.id.fret_grid);    

    TextView tv = (TextView) findViewById(android.R.id.text1);
    tv.setTextColor(Color.WHITE);
    tv.setBackgroundColor(Color.BLACK);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, letters);

    //ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.my_item, letters);
    mGrid.setAdapter(adapter);
    mGrid.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(getApplicationContext(), ((TextView) v).getText(), Toast.LENGTH_SHORT).show();     

            // Do Stuff
            dialog.dismiss();

        }
    });
    dialog.show();
}
...

-my_item.xml -

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    android:gravity="center_vertical|center_horizontal"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/black" />

-grid_pop.xml -

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fret_grid"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/black"
    android:columnWidth="55dp"
    android:gravity="center"
    android:horizontalSpacing="1dp"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:verticalSpacing="1dp" >

</GridView>

1 个答案:

答案 0 :(得分:0)

更改为

android:textAppearance="?android:attr/textAppearanceListItemSmall"

并且您的项目将具有自定义列表项XML的默认选择行为(理论,尚未测试)。

编辑:点击它时,尝试使列表项显示为simple_list_item_1:

在列表项中:

android:background="@drawable/clickable"

在drawable文件夹中添加:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
    android:drawable="@android:drawable/list_selector_background" />      
</selector>