2010-02-07 46 views
1

我讨厌问这个问题的范围;出于某种原因,我无法自己弄清楚。我有一个垂直LinearLayout,它包含我在我的应用程序中定义的自定义View和TextView。我希望我的自定义视图在屏幕顶部对齐,而TextView要在屏幕底部对齐。不幸的是,无论我对XML文件的属性做出什么样的改变,当我运行模拟器时,我的自定义视图总是垂直居中。 XML是这样的:对齐情况的LinearLayout

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:gravity="top"> 

    <CustomView 
    android:id="@+id/customID" 
     android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       tileSize="24" 
       android:focusableInTouchMode="true" android:layout_gravity="top"/> 

    <TextView 
    android:id="@+id/text" 
     android:text="@string/droidtactoe_layout_text" 
     android:visibility="visible" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     android:textSize="24sp" android:textColor="#00000000" android:layout_gravity="bottom"/> 

</LinearLayout> 

回答

1

首先,鉴于您的规则(“我想我的自定义视图要在屏幕的顶部和TextView的排列在屏幕的底部对齐” ),我会推荐一个RelativeLayout,因为它会更简单。只需使用上的TextViewCustomViewandroid:layout_alignParentBottom="true"android:layout_alignParentTop="true",并转储全部gravity/layout_gravity东西。

如果您CustomView仍然行为不端,暂时地以Button或东西取代它。如果Button按照您的预期进行布局,那么执行CustomView时会出现问题。如果你继承一个真正的View(例如,CustomViewTextView一个子类),你应该继承所有铺设的事情了正确的功能。如果你的CustomView只是View的一个子类,那么你可能需要重写或调用一些你不需要的东西。我还没有定制View子类,只有像LinearLayout这样的子类,所以我不能100%确定你会错过什么。

1

谢谢!这是CustomView中的一个问题。我正在使用Snake demo的重写视图的修改版本。该演示使用基于View高度和宽度的onSizeChanged中定义的X和Y偏移量。然后我在onDraw方法中使用这些偏移量来填充我试图绘制的对象的尺寸。

由于现在对我没有意义的原因,我认为视图的宽度和高度会受到onDraw b/c中设置宽度和高度布局的内容的限制包装内容。但是,传入onSizeChanged的宽度和高度是整个屏幕的尺寸。因此,这些偏移量迫使我的自定义视图填满整个屏幕。我删除了偏移量,问题似乎解决了。

非常感谢!