在列表视图中使用粗体(仅适用于每个条目的一部分)

时间:2019-06-16 03:14:27

标签: android xml string listview

我有一个包含很多项目的列表视图。每个项目都有一个数字作为其第一个字符。我希望列表中的每个条目都使用粗体显示。我有一个列表数组,我将其提供给数组适配器以使其成为列表视图。值不稳定,因此无法将其放在xml文件中。有什么办法可以实现我的目标?我正在制作“公交车何时到达”应用

<?xml version="1.0" encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<SearchView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/search_view"
    android:queryHint="Αναζήτηση Γραμμής"
    android:inputType="text">

</SearchView>
    <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    <ListView
        android:id="@+id/listview2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />

    <ListView
        android:id="@+id/listview3"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/swipeLayout"
    android:visibility="gone"
    android:paddingTop="8dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        <ListView
        android:id="@+id/listview4"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />
</android.support.v4.widget.SwipeRefreshLayout>

private void initUI() {
    final ArrayList<String> arrayList = new ArrayList<>();
    try {
        AssetManager assetManager = getAssets();
        ObjectInputStream input = new ObjectInputStream(new GZIPInputStream((assetManager.open("names.dat"))));
        Object readObject = input.readObject();
        input.close();

        ArrayList<String> names = (ArrayList<String>) readObject;
        arrayList.addAll(names);
        routes = read_files("routes.dat");
        line_route = read_files("line_route.dat");
        lastcall= new ArrayList<String>();
        editsearch= (SearchView) findViewById(R.id.search_view);
        editsearch.setOnQueryTextListener(this);
        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeLayout);
        swipeRefreshLayout.setOnRefreshListener(this);
        Runnable refresh = new Runnable() {
            public void run() {
                if ((MainActivity.this.afikseis.getVisibility()==View.VISIBLE)&& !(swipeRefreshLayout.isRefreshing())){
                    get_time(lastcall.get(0),lastcall.get(1),lastcall.get(2));
                }
            }
        };
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
        executor.scheduleAtFixedRate(refresh, 10, 30, TimeUnit.SECONDS);

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }


    arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, arrayList);
    listView.setAdapter(arrayAdapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            print_routes(arrayList.get(i), line_route, routes);
            print_routes(arrayAdapter.getItem(i).toString(), line_route, routes);
        }
    });
}

预先感谢

2 个答案:

答案 0 :(得分:0)

可以共享一些代码会更好。 我还建议您使用具有更好优化功能的RecyclerView替换listView,您可以阅读有关here的信息。

还有您的问题。 您可以通过从文本中拆分数字的方式构建ListItem,并为Number TextView赋予粗体样式。 看起来应该是这样

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Num."
    android:textStyle="bold"
    android:layout_marginRight="5dp"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="Some Text"/>

此行使文本变为粗体

android:textStyle="bold"

答案 1 :(得分:0)

您需要使用SpannableString。以下是一些有用的链接:

how to make a specific text on TextView BOLD

Explain the meaning of Span flags like SPAN_EXCLUSIVE_EXCLUSIVE

一种可能的方法是遍历列表,并使用链接中的方法更改每个字符串,然后在阵列适配器中使用此更新的列表。

您可以创建一个在每次向列表中添加字符串时执行此操作的函数。该函数可以将粗体文本仅应用于列表视图最后一项中的第一个数字。