私はアンドロイドで作業しています。私は自分のリストビューをコンテンツを水平方向に折り返し、すべての幅を埋めないようにしたい。 wrap_contentプロパティが機能していません。何をすべきか?Android:wrap_contentがListViewで動作しない
答えて
Romain Guyのように見ることができますfill_parentを使用するか、リストビューの効率的な設計のためにリストビュー
ためmatch_parent (GoogleのエンジニアがUIツールキットで動作します)
幅をwrap_content
に設定すると、ListViewの幅がその子の幅と同じになるように設定されます。したがって、ListViewはアイテムを測定し、アダプタ上でgetView()を呼び出さなければならないアイテムを取得する必要があります。これは、レイアウトパスの数、親レイアウトの動作などによって数回発生することがあります。
ListViewのレイアウト幅またはレイアウト高さをwrap_content
に設定すると、ListViewはすべての単一ビューを測定しようとしますあなたが望むものではありません。
は覚えておいてください:すべての回でリストビューまたはGridViewsためwrap_content
を設定回避し、より多くの詳細は、このGoogle I/O videoがListView
でwrap_content
高さを達成ためには、リストビュー
I want my list view to wrap its content horizontally and not to fill all the width.
あなたがリスト表示のためのwrap_contentにのみ最初の3つの項目(行)を与える場合は、残りの部分は無視されます表示されますので、wrap_contentを与える..だから、ドン」することはできませんリスト表示の場合トンの使用wrap_content ...常にあなたがこのWorld of ListView
fill_parentを使用しないでください。 Android 2.2では廃止されました:http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html#FILL_PARENT – spaaarky21
の世界の話を見るために、私たちはCustomListView
を使用する必要がありますそのextends
私たちのネイティブListView
。
MyListView.javaこのようなあなたのlayout
使用のカスタムビューで
public class MyListView extends ListView {
private android.view.ViewGroup.LayoutParams params;
private int oldCount = 0;
public MyListView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas)
{
if (getCount() != oldCount)
{
int height = getChildAt(0).getHeight() + 1 ;
oldCount = getCount();
params = getLayoutParams();
params.height = getCount() * height;
setLayoutParams(params);
}
super.onDraw(canvas);
}
}
、
layout.xml
<com.yourpackagename.MyListView
...
android:layout_width="match_parent"
android:layout_height="wrap_content"
... />
それはのLinearLayout 作成を使用して実装することができますこの例のように
public class LinearLayoutAdapter {
LinearLayout linearLayout;
ArrayList<String> arrayList
private View rootView;
private static LayoutInflater inflater;
public ChoicesAdapter_(ArrayList<String> arrayList ,LinearLayout linearLayout)
{
this.index =index;
this.arrayList=arrayList;
this.linearLayout=linearLayout;
notifyDataSetChanged();
}
private void notifyDataSetChanged() {
linearLayout.removeAllViews();
for (int i =0;i<getCount();i++){
linearLayout.addView(getView(i,null,null));
}
}
public int getCount() {
return arrayList.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(final int position, View convertView, ViewGroup parent) {
rootView = inflater.inflate(R.layout.row_list, null);
TextView textView = (TextView)rootView.findViewById(R.id.text);
textView.setText(arrayList.get(position));
return rootView;
}
MainActivity例
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("Accent");
arrayList.add("Acclaim");
arrayList.add("Accord");
arrayList.add("Achieva");
arrayList.add("Aerio");
arrayList.add("Aerostar");
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.linearLayout);
linearLayoutAdapter= LinearLayoutAdapter(arrayList,linearLayout);
}
}
XMLの例
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:textColor="@color/dark_gray"
android:background="@color/white"
android:textSize="20dp"
android:text="" />
はい、あなたはこれを行うことができますが、あなたはリサイクルシステムをルーズにする(または実装するのが大変です)。いくつかの項目でうまく動作しますが、ほとんどの項目では、リストビューをアダプタとして使用しないことも考えられます。 –
- 1. AlphabetIndexerがカスタムListViewで動作しない
- 2. Android listview onClickが動作しない
- 3. Android ListView fastScrollThumbDrawableが動作しない
- 4. listviewとreacネイティブが動作しない
- 5. ListViewがランドスケープモードで正しく動作しないScrollView
- 6. リフレクションコントロールでネイティブのListViewがAndroidで動作しない場合
- 7. ListViewのAndroidセレクタby setItemCheckedがバージョン2.2.1で動作しない
- 8. notifyDataSetChangedメソッドがBaseAdapterとListViewで動作しない
- 9. ListViewでSeeKBarが期待通りに動作しない
- 10. ListViewのItem longClickがImageViewで動作しない
- 11. ViewPagerがListViewでコアctryを動作しない
- 12. ListView ItemClickがXamarin.Forms(iOS)で動作しない
- 13. カスタムListViewのフィルタ機能がアンドロイドで動作しない
- 14. Android:isSelectedがListViewで初めて動作しない
- 15. Xamarin Android EggsToGo(スワイプジェスチャ)リスナーがListViewで動作しない
- 16. ListView setOnItemLongClickListenerが動作していないandroid
- 17. Aysntaskからlistviewを更新してadapter.addが動作しない
- 18. Android ListView - onListItemClickが正しく動作しない
- 19. スクロール後にListViewアイテムのアニメーションが動作しない
- 20. ListView Androidの項目が正常に動作しない
- 21. In Paged Listview CheckBox_CheckedChangedイベントが正常に動作しない
- 22. Xamarin Android ListView ViewHolderが奇妙な動作
- 23. ListViewのOnItemClickListenerが動作しません。
- 24. music listviewが4.4以上で動作していませんか?
- 25. ListViewでsetSelectionが奇妙な動作を引き起こしています
- 26. ListViewで最初に表示されるグループが正常に動作しない
- 27. ListView deleteコマンドとObjectDataSourceの削除メソッドが正しく動作しない
- 28. ListViewのonClickイベントがLinkified電子メールアドレスで起動しない
- 29. Listview trのクリックイベントでJqueryが起動しない
- 30. カスタムListViewアダプタ、奇妙なImageViewの動作
このアドバイスは普遍的には見えません。ListView/Adapaterの組み合わせは、人々が最初に気付くよりも一般的でスケーラビリティがあります。つまり、人々は任意のデータセットでwrap_contentを使用することの結果を認識しない可能性もあります。しかし、それは、データセットが固定された、または限られたサイズのケースがたくさんあるわけではないというわけではありません。そのような場合には、wrap_contentを使用する方が判断の声が多いでしょう。 – spaaarky21
これは、リントが警告すべきもののようですが、現在のところそうではありません。 –
私はこの答えがなぜ受け入れられたのか分かりません。それは全く質問に答えません。また、RomainのGuyポストは、まったく別の質問だった:レイアウトが測定された回数 - 少なくとも3つのリスト項目についてwrap_contentがうまくいく理由を実際に説明するビデオを指しています。より複雑なリスト(かなりのパフォーマンスコスト)で作業することができます。 – Rick77