我有一个线性布局,其中包括imageview和textview,一个在另一个线性布局。
<LinearLayout android:orientation="horizontal" ... >
<ImageView
android:id="@+id/thumbnail"
android:layout_weight="0.8"
android:layout_width="0dip"
android:layout_height="fill_parent">
</ImageView>
<TextView
android:id="@+id/description"
android:layout_weight="0.2"
android:layout_width="0dip"
android:layout_height="wrap_content">
</TextView>
有些规则可能会丢失,这是为了给一个想法,如何布局。
我想要另一个小的文本视图,长度和宽度都是50dip,放在imageview上面,这里的over指的是z-index大于imageview,我想把它放在imageview的中心和上面(重叠)。
我想知道我们如何将一个视图置于另一个视图之上,具有不同的z索引(最好是线性布局)?
改变绘制顺序
另一种方法是改变父视图绘制的顺序。你可以通过调用setChildrenDrawingOrderEnabled(true)和覆盖getChildDrawingOrder(int childCount, int i)在ViewGroup中启用这个功能。
例子:
/**
* Example Layout that changes draw order of a FrameLayout
*/
public class OrderLayout extends FrameLayout {
private static final int[][] DRAW_ORDERS = new int[][]{
{0, 1, 2},
{2, 1, 0},
{1, 2, 0}
};
private int currentOrder;
public OrderLayout(Context context) {
super(context);
setChildrenDrawingOrderEnabled(true);
}
public void setDrawOrder(int order) {
currentOrder = order;
invalidate();
}
@Override
protected int getChildDrawingOrder(int childCount, int i) {
return DRAW_ORDERS[currentOrder][i];
}
}
输出:
调用OrderLayout#setDrawOrder(int) 0-1-2结果: