将Listview与布局的其他元素对齐

时间:2014-10-29 22:10:17

标签: android android-layout listview android-listview

我正在创建一个应用程序,其中有一个选择时间(以小时和分钟为单位)的功能。为此,我创建了两个列表视图,一个用于选择小时,另一个用于选择分钟。两个listviews都应该有七个项目可见。然后有两个文本视图应该与第四个项目的底部对齐。你可以看到截图,以便更好地理解它。

screenshot

UI应该看起来像图像。但问题是,对齐方式随屏幕分辨率的变化而变化。我尝试为不同的dpis(hdpi,mdpi,xhdpi,xxhdpi)设置不同的边距和大小。但是,仍然对于某些设备(例如,S4),视图不对齐,列表视图显示第8项的顶部。我用diff测试了模拟器上的应用程序。决议,它在那里工作正常。

xml布局文件中的代码:

<RelativeLayout
    android:id="@+id/linearLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
   android:visibility="visible">

    <ListView
        android:id="@+id/hourList"
        android:layout_width="@dimen/timerListViewWidth"
        android:layout_height="match_parent"
        android:paddingBottom="63dp"
        android:background="@null"
        android:scrollbars="none"
        android:divider="@null"
        android:layout_centerVertical="true"
        android:dividerHeight="0dp" >
    </ListView>

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hrs"
        android:textColor="@color/white"
        android:paddingBottom="@dimen/bottomPaddingListPostFix" <!-- diff. for diff. dpis-->
        android:layout_toRightOf="@+id/hourList"
        android:layout_centerVertical="true"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <ListView
        android:id="@+id/minList"
        android:layout_width="@dimen/timerListViewWidth"
        android:layout_height="match_parent"
        android:paddingBottom="63dp"
        android:background="@null"
        android:layout_toRightOf="@+id/textView7"
        android:layout_marginLeft="10dp"
        android:scrollbars="none"
        android:layout_centerVertical="true"
        android:divider="@null"
        android:dividerHeight="0dp" >
    </ListView>

    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="min"
        android:textColor="@color/white"
        android:paddingBottom="@dimen/bottomPaddingListPostFix"  <!-- diff. for diff. dpis-->
        android:layout_toRightOf="@+id/minList"
        android:layout_centerVertical="true"
        android:textAppearance="?android:attr/textAppearanceSmall" />


</RelativeLayout>

和listview行的代码:

<?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="match_parent"
    android:background="@null"
    android:orientation="vertical"
    android:duplicateParentState="true" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:background="@null"
    android:gravity="center_horizontal"
    android:text="24"
    android:textColor="@drawable/row_selector"
    android:duplicateParentState="true"
    android:textSize="@dimen/timerListViewItemTextSize" />  <!-- diff. for diff. dpis-->

</LinearLayout>

是否可以为所有差异动态管理它。屏幕尺寸和分辨率?如果是,我怎么能实现这一目标?

1 个答案:

答案 0 :(得分:3)

1)再添加两个自定义列表视图,一个用于hrs,另一个用于min 2)使用此代码禁用这两个列表视图的滚动

在CustomListView中:

@Override
public boolean dispatchTouchEvent(MotionEvent ev){
   if(ev.getAction()==MotionEvent.ACTION_MOVE)
      return true;
   return super.dispatchTouchEvent(ev);
}

然后ListView会对点击作出反应,但不会改变滚动位置。

3)并使用相同的逻辑来显示用于白色的hrs和min