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

标签 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" />

我用 ArrayAdapterGridView 封装在 Dialog 中。

我想在单元格之间有某种边框(1dp 白色或黑色)。我能够完成此任务的唯一方法是编写自定义 xml 并使用它而不是 simple_list_item_1,这很好,除了这似乎会破坏 select 等上的项目突出显示,而且我似乎无法匹配默认值使用我的自定义 xml 来查看它。

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

我在下面的代码中做了一个小小的尝试,但不出所料,我得到了一个空指针异常。大多数搜索只是找到了有关自定义 xml 的建议,但为了快速更改字体颜色和字体背景颜色而执行所有这些操作似乎很奇怪。

为了以防万一,我会放入我的 xml。 如果有必要的话,至少使用 API 11。

谢谢大家,

迈克

-Java 代码 fragment -

...

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>

最佳答案

更改为

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

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

编辑:尝试这样做,让列表项在您像 simple_list_item_1 一样点击时亮起:

在列表项中:

android:background="@drawable/clickable"

在可绘制文件夹中添加以下内容:

<?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>

关于java - Android - 我可以以编程方式覆盖 simple_list_item_1 颜色吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20850837/

相关文章:

c# - 无法在 Xamarin 中加载简单页面

android - 如何在后台运行代码,即使屏幕关闭?

java - 如何创建包含两个元素的嵌套 xml 结构?

java - JBoss 模块的 module.xml 示例给出了解析错误

java - 如何在java中返回选定的日期结果?

java - 将值从一个 JSP 页面传递到另一个 JSP 页面并从第一个 JSP 获取响应数据

java - 无法建立 WebSocket 连接 - Spark Java Framework

java - "precise rethrow"与最终异常的关系

android - 在焦点 EditText 问题处隐藏工具栏

c# - Select 语句获取 byte[] 和字符串但不获取 XML