如何更改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 中的行颜色

根据android中的长度文本更改listview行的高度

如何更改 ListView/GridView 中选定行的文本颜色? (使用 Expression Dark 主题)

Android:具有重叠行的垂直 ListView

Android:使用 parsequery 适配器在 listview 中更改 imageview 的图像

android中ListView行的动态高度