如何设置膨胀的视图宽度,它的父母的一半?

时间:2015-09-25 17:35:10

标签: android android-linearlayout android-recyclerview android-inflate

我在这个方法中夸大视图:

    protected ASCIIEncoding m_encoding = new ASCIIEncoding();
string QRdata = @"35150909165024000175590000193130072726117830|20150924062259|50.00||hdMEPiER6rjZKyKA+4+voi1nncxsAGFbYsEEqnh04SbvUEI/haUF4GUBPxT6Q2Uhf9f8QYgxiwxWo3GxRrvj4WnNeTYgAqUAYmOANPItNkOw0CppmZ4R8i1ZOlnftVhksCM0zrl4RiKgoazbN44hUu2nQf0W/JLvFXzXu12JlcSThNtmyJ6m9WBsMc/sf9BE14HDoXMyKRIQYt5TkEjilHH9Ffa0saRyUIp+Fji89/Moq8YCCFC+qC44XGxsvNCeeHUNOc1LgPP0DbU1miwpVnrBlEl87RU8Iy0r8fN/fNhbcStkwfTEvhYvZz42nEKHrmGTpGZYkHuTFCNZPq7aCA==";
        int store_len = QRdata.Length + 3;
                        byte store_pL = (byte)(store_len % 256);
                        byte store_pH = (byte)(store_len / 256);


                         string txt = m_encoding.GetString(new byte[] { 29, 40, 107, store_pL, store_pH, 49, 80, 48 }); //FUNCTION 180
            txt += QRdata;
            txt += m_encoding.GetString(new byte[] { 29, 40, 107, 3, 0, 49, 69, 48 });//FUNCTION 169
            txt += m_encoding.GetString(new byte[] { 29, 40, 107, 3, 0, 49, 67, 5 });//FUNCTION 167
            txt += m_encoding.GetString(new byte[] { 29, 40, 107, 4, 0, 49, 65, 50, 0 });//FUNCTION 165
            txt += m_encoding.GetString(new byte[] { 29, 40, 107, 3, 0, 49, 81, 48 });//FUNCTION 181

由于" 错误",我的 LinearLayout 并未附加到它的父级,因此没有父级和我无法使用 Layer_Weight (我使用 view.getParent()进行了测试。它返回null)。因为当我使用 Layer_Weight 和" Layer_Width = 0dip"时, LinearLayout 会消失。

如果我使用" True "作为第三个参数( view.getParent()返回父级),我收到此错误:

" 指定的子项已有父项。您必须先在孩子的父母身上调用removeView()。"。

这是父母:

public TabViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.tabs_layout, parent, false);
    return new TabViewHolder(view);
}

这是父母风格:

<android.support.v7.widget.RecyclerView android:id="@+id/tabBar" style="@style/tabBar"/>

这是LinearLayout,子样式:

<style name="tabBar">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">0dip</item>
     <item name="android:layout_weight">0.1</item>
     <item name="android:weightSum">1</item>
     <item name="android:background">@color/headerBg</item>
</style>

这是孙子,TextView:

<style name="tabLayout">
     <item name="android:layout_width">0dip</item>
     <item name="android:layout_height">match_parent</item>
     <item name="android:layout_weight">0.5</item>
     <item name="android:orientation">horizontal</item>
     <item name="android:gravity">center_vertical</item>
 </style>

如何设置LinearLayout宽度,它的一半是父级?

提前感谢。

1 个答案:

答案 0 :(得分:1)

我用这种方式来实现目标。

我将recyclelerView(父项)作为参数发送到tabBarAdapter,它使linearLayout,子项膨胀,并在此适配器中,在onCreateViewHolder方法中将linearLayout的宽度设置为recyclerView的一半宽度。

view.getLayoutParams().width = tabBar.getWidth()/2;

我认为,这是违反&#34; 松散耦合&#34; (我想完全将代码与代码分开)。