2017-02-16 41 views
0

容器是LinearLayout中,如何通过代码添加分隔视图

<LinearLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

在代码中,我想补充意见:

final LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

// add alpha view to container view 
View alphaView = inflater.inflate(R.layout.item_info_alpha, null, false); 
container.addView(alphaView); 

// add divider view to container view 
container.addView(inflater.inflate(R.layout.item_divider, null, false)); 

// add beta view to container view 
View betaView = inflater.inflate(R.layout.item_info_beta, null, false); 
container.addView(betaView); 

// add divider view to container view 
container.addView(inflater.inflate(R.layout.item_divider, null, false)); 

item_divider.xml

<?xml version="1.0" encoding="utf-8"?> 
<View xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="8dp" 
    android:background="#F2F2F4" /> 

添加代码时分隔符不可见。

如何在将视图添加到线性布局时使此分隔线可见?

为什么当我们通过xml添加查看,它不会叠加在LinearLayout中?

回答

1

您可以简单地这样做:

container.addView(inflater.inflate(R.layout.item_divider, null)); 

或者试试这个代码:

 View view = new View(YOUR_CONTEXT); //getContext() for example 
     int hight = 8; 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, hight); 
     view.setLayoutParams(params); 
     view.setBackgroundColor(Color.parseColor("#F2F2F4")); 
     container.addView(view); 
+0

container.addView(inflater.inflate(R.layout.item_divider,null));将不起作用 – purplebee

+0

@purplebee它会,请参阅文档:'https://developer.android.com/reference/android/view/LayoutInflater.html#inflate(int,android.view.ViewGroup)' –

0

替换inflater.inflate(..)truefalse并没有专门调用addView(..)LinearLayout

LayoutInflater的用途是不必手动设置LayoutParams

如果您使用attachToRoot=falseView充气,则使用root的LayoutParams创建新的View,然后丢弃。

如果attachToRoot=true,LayoutParams被保留,并且新的View被附加到rootView,在你的情况下LinearLayout

+0

您试图回答“为什么”的一部分,但我没有得到它。 – purplebee

+0

好的,每个View都有一组名为LayoutParams的变量,它们决定将视图放置在屏幕上的位置,它有多大,等等。如果您只是调用addView(),则视图被添加但没有LayoutParams,因此它不会知道如何显示自己 – CrowsNet

+0

来解决这个问题,要么显式调用setLayoutParams(),要么使用LayoutInflater.inflate(layoutId,parent,true)<=真正代表“将新的虚拟视图附加到父视图组,并且还请使用LayoutParams我的父母知道我想如何在屏幕上看。“ – CrowsNet