Android Studio 在列表视图中将字符串的一部分设置为右对齐
Android Studio set alignment of part of a String to the right in a listview
我有一个带有 Arraylistadapter 的列表视图,我想将列表视图中的部分字符串设置到右侧。
ListView Names = (ListView) findViewById(R.id.ListViewAssetsNames);
String Peter = "Peter";
String PeterNumber = "12345";
int Namelength = Peter.length();
int Numberlength = PetersNumber.length() + Namelength +1 ;
final SpannableStringBuilder Peterfinal = new SpannableStringBuilder(Peter + " " + PetersNumber);
Peterfinal.setSpan((new AlignmentSpan.Standard(Layout.Alignment.ALIGN_OPPOSITE)), Namelength, Numberlength, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
SpannableStringBuilder[] TestStrings = new SpannableStringBuilder[1];
TestStrings [0] = Peterfinal;
ArrayAdapter<SpannableStringBuilder> listViewAdapter = new ArrayAdapter<SpannableStringBuilder>(
getActivity(),
android.R.layout.simple_list_item_1,
TestStrings
);
Names.setAdapter(listViewAdapter);
}
我尝试使用 Spannable 字符串并将字符串的数字部分的对齐方式设置为右侧,这导致将整个字符串设置为右侧。
重要的是它是一个列表视图。我已经尝试过使用旁边的 2 个列表视图,但是滚动一个列表视图时出现问题,另一个列表视图不随滚动一起滚动。
像这样尝试自定义列表项:
listview_item_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">
<TextView
android:text="Peter"
android:id="@+id/register"
android:textStyle="bold"
android:textSize="25dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="2" />
<TextView
android:text="12345"
android:id="@+id/cancel"
android:textStyle="bold"
android:textSize="25dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" />
</LinearLayout>
它会给你想要的输出:
并在此处设置自定义布局适配器:
MyAdapter.java
public class MyAdapter extends ArrayAdapter<MyData>{
Context context;
int layoutResourceId;
MyData data[] = null;
public MyAdapter(Context context, int layoutResourceId, Mydata[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
WeatherHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new WeatherHolder();
holder.imgIcon = (TextView)row.findViewById(R.id.txtTitle);
holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
row.setTag(holder);
}
else
{
holder = (WeatherHolder)row.getTag();
}
MyData data = data[position];
holder.txtTitle1.setText(data.title);
holder.txtTitle2.setText(data.icon);
return row;
}
static class WeatherHolder
{
TextView txtTitle1;
TextView txtTitle2;
}
}
在数据class中:
public class MyData {
public String icon;
public String title;
public MyData(){
super();
}
public MyData(String icon, String title) {
super();
this.icon = icon;
this.title = title;
}
}
然后在 Activity Class:
public class MainActivity extends Activity {
private ListView listView1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyData my_data[] = new MyData[]
{
new Weather("Peter", "12345"),
};
MyAdapter adapter = new MyAdapter(this,
R.layout.listview_item_row, my_data);
listView1 = (ListView)findViewById(R.id.listView1);
View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
listView1.addHeaderView(header);
listView1.setAdapter(adapter);
}
我有一个带有 Arraylistadapter 的列表视图,我想将列表视图中的部分字符串设置到右侧。
ListView Names = (ListView) findViewById(R.id.ListViewAssetsNames);
String Peter = "Peter";
String PeterNumber = "12345";
int Namelength = Peter.length();
int Numberlength = PetersNumber.length() + Namelength +1 ;
final SpannableStringBuilder Peterfinal = new SpannableStringBuilder(Peter + " " + PetersNumber);
Peterfinal.setSpan((new AlignmentSpan.Standard(Layout.Alignment.ALIGN_OPPOSITE)), Namelength, Numberlength, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
SpannableStringBuilder[] TestStrings = new SpannableStringBuilder[1];
TestStrings [0] = Peterfinal;
ArrayAdapter<SpannableStringBuilder> listViewAdapter = new ArrayAdapter<SpannableStringBuilder>(
getActivity(),
android.R.layout.simple_list_item_1,
TestStrings
);
Names.setAdapter(listViewAdapter);
}
我尝试使用 Spannable 字符串并将字符串的数字部分的对齐方式设置为右侧,这导致将整个字符串设置为右侧。
重要的是它是一个列表视图。我已经尝试过使用旁边的 2 个列表视图,但是滚动一个列表视图时出现问题,另一个列表视图不随滚动一起滚动。
像这样尝试自定义列表项: listview_item_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">
<TextView
android:text="Peter"
android:id="@+id/register"
android:textStyle="bold"
android:textSize="25dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="2" />
<TextView
android:text="12345"
android:id="@+id/cancel"
android:textStyle="bold"
android:textSize="25dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" />
</LinearLayout>
它会给你想要的输出:
并在此处设置自定义布局适配器:
MyAdapter.java
public class MyAdapter extends ArrayAdapter<MyData>{
Context context;
int layoutResourceId;
MyData data[] = null;
public MyAdapter(Context context, int layoutResourceId, Mydata[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
WeatherHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new WeatherHolder();
holder.imgIcon = (TextView)row.findViewById(R.id.txtTitle);
holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
row.setTag(holder);
}
else
{
holder = (WeatherHolder)row.getTag();
}
MyData data = data[position];
holder.txtTitle1.setText(data.title);
holder.txtTitle2.setText(data.icon);
return row;
}
static class WeatherHolder
{
TextView txtTitle1;
TextView txtTitle2;
}
}
在数据class中:
public class MyData {
public String icon;
public String title;
public MyData(){
super();
}
public MyData(String icon, String title) {
super();
this.icon = icon;
this.title = title;
}
}
然后在 Activity Class:
public class MainActivity extends Activity {
private ListView listView1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyData my_data[] = new MyData[]
{
new Weather("Peter", "12345"),
};
MyAdapter adapter = new MyAdapter(this,
R.layout.listview_item_row, my_data);
listView1 = (ListView)findViewById(R.id.listView1);
View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
listView1.addHeaderView(header);
listView1.setAdapter(adapter);
}