如何更改android ListView中特定行的样式
Posted
技术标签:
【中文标题】如何更改android ListView中特定行的样式【英文标题】:How to change style of specific rows in android ListView 【发布时间】:2015-11-03 20:09:38 【问题描述】:我的应用程序中有一个列表视图,它在 XML 中声明,然后根据我在 XML 中声明的字符串数组在代码中将内容传递给它。我是 android 编程新手,但我想知道如何使某些列表视图元素中的文本 bold 并将其背后的列表视图背景变暗。
我在我的 strings.xml 中将我的集合名称作为一个数组:
<string-array name="setsArray">
<item>set1</item>
<item>set2</item>
<item>set3</item>
<item>set4</item>
<item>set5</item>
<item>set6</item>
</string-array>
我在活动的 layout.xml 中声明了我的列表视图
<ListView
android:layout_
android:layout_
android:id="@+id/listView"
android:layout_below="@+id/app_bar"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
在活动的代码中我有这个:
final ListView setList = (ListView) findViewById(R.id.listView);
setList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.setsArray)));
setList.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
int itemPosition = position;
String itemValue = (String) setList.getItemAtPosition(itemPosition);
if (!itemValue.equals("SPANISH"))
Intent intent = new Intent(view.getContext(), SetViewActivity.class);
intent.putExtra("value", itemValue);
startActivity(intent);
);
请注意,此代码采用被点击的集合的名称,并将其传递给具有意图的下一个活动,以便它知道要显示什么。如果可能的话,我需要保持这个完整或用另一个系统替换它,该系统发送一些我可以用来区分下一个活动中的集合。
【问题讨论】:
【参考方案1】:因为你不使用自定义适配器(我猜),请试试这个:
<string-array name="setsArray">
<item>set1</item>
<item>set2</item>
<item>set3</item>
<item>set4</item>
<item> <![CDATA[ <b>set5</b> ]]> </item>
<item>set6</item>
</string-array>
我希望android默认使用html.fromHtml() :)
Android:Make characters bold in xml
【讨论】:
默认不工作。我将如何实施 yourWidget.setText(Html.fromHtml(getString(R.string.Help)));在我的 ListView 中,因为 ArrayAdapter 不想接受 HTML 输入?【参考方案2】:请关注The World of ListView。它解释了 ListView 的重要方面以及如何为您的 ListView 制作适配器。特别注意使用getItemViewType()
和getViewTypeCount()
的部分。
【讨论】:
【参考方案3】:我认为您必须实现自定义ListAdapter
。在getView() 方法中,您将能够根据索引更改项目的样式。
作为旁注,我看不出您不使用RecyclerView
的原因。这是创建列表的更灵活和最新的选择。
使用 RecyclerView 可以这样做:
@Override
public void onBindViewHolder(ViewHolder holder, int position)
// - get element from your dataset at this position
// - replace the contents of the view with that element
holder.mTextView.setText(mDataset[position]);
if(position == 5) holder.mTextView.setTypeface(null, Typeface.BOLD);
【讨论】:
对不起,我是个菜鸟,但我将如何制作一个简单的自定义 ListAdapter?我做了一些谷歌搜索,但一切似乎都超出了我的范围。 @mxbi 我建议看看这个:developer.android.com/training/material/lists-cards.html以上是关于如何更改android ListView中特定行的样式的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Sqlite 数据库中的特定数据上更改 Listview 中的行颜色
如何更改 ListView/GridView 中选定行的文本颜色? (使用 Expression Dark 主题)