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);
    }