3

私のアプリは 2 つの異なるリストを生成します。1つは行に含まれていないため、デフォルトListViewのスタイルを使用します。もう 1 つのリストはカスタムを使用し、各行の内側に があります。私がやりたいのは、余白とテキスト サイズが両方のリストでまったく同じになるようにすることだけです。ListViewTextViewCursorAdapterTextView

私の最初のリストは、各行の中に何ListViewもない標準を使用しています。これは次のようになります。TextView

ここに画像の説明を入力

これを生成するコードは次のとおりです。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.records);

    DatabaseHandler db = new DatabaseHandler(this);
    ArrayList<String> records = db.getRecords(this);

    this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, records));
} 

そのための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="fill_parent" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

私の 2 番目のリストは、カスタム `CursorAdapter を介して生成された各行内ListViewで aを使用しています。これは次のようになります。TextView

ここに画像の説明を入力

これを生成するコードは次のとおりです。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.achievements);

    DatabaseHandler db = new DatabaseHandler(this);
    Cursor cursor = db.getAchievements(this);
    AchievementAdapter cursorAdapter = new AchievementAdapter(this, cursor);

    this.setListAdapter(cursorAdapter);
} 

private class AchievementAdapter extends CursorAdapter {
    public AchievementAdapter(Context context, Cursor c) {
        super(context, c);
    }

    @Override
    public void bindView(View v, Context context, Cursor cursor) {
        TextView tv = (TextView) v.findViewById(R.id.achView1);

        if(cursor.getString(cursor.getColumnIndex("completed")).equals("yes")) {
            tv.setText(cursor.getString(cursor.getColumnIndex("name"))+" (completed)");
            tv.setTextColor(Color.GREEN);
        }
        else {
            tv.setText(cursor.getString(cursor.getColumnIndex("name")));
        }
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View v = inflater.inflate(R.layout.achievements_item, parent, false);
        return v;
    }
}   

そのための実績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="fill_parent" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/android:empty"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text=""/>

</LinearLayout>

そのための achievements_item xml は次のとおりです。

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

    <TextView
        android:id="@+id/achView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="" />

</LinearLayout>

基本的に、これら 2 つのリストがまったく同じに見えるようにしたいだけです。デフォルトの行スタイルTextViewを継承する方法はありますか? ListViewそれとも、マージンやすべてを自分で操作する必要がありますか?

4

2 に答える 2

5

の属性をTextViewデフォルトListViewレイアウトからコピーandroid.R.layout.simple_list_item_1して、独自の行レイアウトで使用するだけです。

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

    <TextView
        android:id="@+id/achView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:gravity="center_vertical"
        android:paddingLeft="6dip"
        android:minHeight="?android:attr/listPreferredItemHeight" />

</LinearLayout>

また、カスタマイズされたListView行レイアウトに必要なものが だけの場合TextViewは、親を削除して、レイアウトにLinearLayout余分なものがないようにすることができますView

于 2012-05-31T14:26:26.767 に答える
0

achievements_item.xml で、TextView の上部と下部にパディングを追加します。

 <TextView
        android:id="@+id/achView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:text="" />
于 2012-05-31T14:26:59.357 に答える