我有一个包含很多项目的列表视图。每个项目都有一个数字作为其第一个字符。我希望列表中的每个条目都使用粗体显示。我有一个列表数组,我将其提供给数组适配器以使其成为列表视图。值不稳定,因此无法将其放在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);
}
});
}
预先感谢
答案 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
一种可能的方法是遍历列表,并使用链接中的方法更改每个字符串,然后在阵列适配器中使用此更新的列表。
您可以创建一个在每次向列表中添加字符串时执行此操作的函数。该函数可以将粗体文本仅应用于列表视图最后一项中的第一个数字。