2017-06-15 115 views
0

正如你看到的,高度通常设置当只有一个文本字符串,但所有的崩溃,当它包裹:如何使用自动换行自动更改布局高度?

enter image description here

这里是我的XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?android:attr/selectableItemBackground" 
    android:focusable="true" 
    android:orientation="horizontal" 
    android:paddingBottom="10dp" 
    android:paddingStart="15dp" 
    android:paddingLeft="15dp" 
    android:paddingRight="15dp" 
    android:paddingEnd="15dp" 
> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:orientation="vertical" 
    > 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textColor="@color/title" 
      android:textSize="16sp" 
      android:textStyle="bold" 
      android:layout_marginTop="10dp" 
     /> 

     <TextView 
      android:id="@+id/descr" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
     /> 

    </LinearLayout> 

    <CheckBox 
     android:id="@+id/checkbox" 
     android:theme="@style/checkBoxStyle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:clickable="true" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:layout_marginTop="7dp" 
     android:layout_marginLeft="15dp" 
     android:layout_marginStart="15dp" 
    /> 

</LinearLayout> 

这里是我的适配器:

class AppsAdapter extends RecyclerView.Adapter<AppsAdapter.ViewHolder> { 

    private Activity activity; 
    private ArrayList<Item> items; 
    private int inflater; 

    private OnItemCheckListener onItemClick; 

    AppsAdapter (Activity activity, ArrayList<Item> items, int inflater, OnItemCheckListener onItemCheckListener) { 

     this.activity = activity; 
     this.items = items; 
     this.inflater = inflater; 
     this.onItemClick = onItemCheckListener; 

    } 

    static class ViewHolder extends RecyclerView.ViewHolder { 

     private ImageView icon; 
     private TextView title, descr, version; 
     private CheckBox checkbox; 

     private ViewHolder (View view) { 

      super (view); 

      icon = (ImageView) view.findViewById (R.id.icon); 

      title = (TextView) view.findViewById (R.id.title); 
      descr = (TextView) view.findViewById (R.id.descr); 
      version = (TextView) view.findViewById (R.id.version); 

      checkbox = (CheckBox) view.findViewById (R.id.checkbox); 

     } 

    } 

    @Override 
    public ViewHolder onCreateViewHolder (ViewGroup parent, int viewType) { 
     return new ViewHolder (LayoutInflater.from (parent.getContext()).inflate (inflater, parent, false)); 
    } 

    @Override 
    public void onBindViewHolder (final ViewHolder holder, int position) { 

     Item item = items.get (position); 

     if (holder.icon != null) 
     holder.icon.setImageDrawable (item.icon); 

     holder.title.setText (item.getItem (0)); 
     holder.descr.setText (item.getItem (1)); 

     // Other actions... 

    } 

} 

那么,真的这么做吗?我不希望使用非标准Android设置的活动,因为我要支持奇巧(4.4),但其默认的主题是可怕的(

或者,也许这将是与TableLayout和解决方案等等?

在此先感谢

回答

0

更改XML

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?android:attr/selectableItemBackground" 
    android:focusable="true" 
    android:gravity="center" 
    android:orientation="horizontal"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:orientation="vertical" 
     android:paddingBottom="5dp" 
     android:paddingTop="5dp"> 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textColor="@color/colorPrimary" 
      android:textSize="16sp" 
      android:text="abababababababababbabababababababab" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/descr" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="abababababababababbababababababababsdhsjdhsadsahdkjsahdsadsadhsadhsauidhsauidhsauihsauihsaduisahduisahduisahduisahdusaidhsauidhsauidhsauiidhsauidhsauidhsauidhsauidhsaudhsauidhsadiusahduisahdusahu" 
      android:textAppearance="?android:attr/textAppearanceSmall" /> 

    </LinearLayout> 

    <CheckBox 
     android:id="@+id/checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:layout_marginLeft="15dp" 
     android:layout_marginStart="15dp" 
     android:layout_marginTop="7dp" 
     android:clickable="true" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:theme="@style/checkBoxStyle" /> 

</LinearLayout> 
+0

遗憾的是它不工作。 PaddingBottom不是一个解决方案( – Acuna

+0

我认为布局设计是完美的,问题是您的自定义视图添加在viewGroup中,您能告诉我代码在哪里膨胀视图吗? –

+0

您是指XML还是programmaticaly?我编辑过 – Acuna

0

您在使用父布局的高度,用这样的机器人:layout_高度= “WRAP_CONTENT”

用户的高度的android:layout_width = “match_parent”

肯定你有O/P

+0

这是什么意思?试过将主LinearLayout更改为'android:layout_height =“match_parent”',但它强大到整个屏幕。 – Acuna

+0

没有它的适配器布局,因此您可以使用match_parent –

相关问题