2015-04-14 42 views
0

出于某种原因,android:layout_height="200sp"属性没有任何效果。预览会在Android Studio中正确绘制,但如果我运行我的应用程序,则列表项不会根据android:layout_height="200sp"更改其大小。我正在使用此RelativeLayout作为ListView的列表项。的RelativeLayout:安卓:layout_height没有效果

有什么建议吗?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="120dip" 
    android:background="#ffffff" 
    > 

    <ImageView 
     android:id="@+id/icon" 
     android:src="@drawable/ic_launcher" 

     android:layout_width="50dip" 
     android:layout_height="50dip" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentTop="true" 
     android:layout_gravity="center" 

     /> 

</RelativeLayout> 

@Edit:

我做了一个简单的例子。我认为列表中的项目高度为120dip,左侧的图标尺寸为50x50 dip。实际情况是,出于某种原因,列表项目与ImageView具有相同的高度。

public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    ViewHolder holder; 
    if(convertView == null){ 
     convertView = mInflater.inflate(R.layout.listview_nearbylist_item, null); 
     holder = new ViewHolder(); 
     //holder.text1 = (TextView) convertView.findViewById(R.id.text1); 
     //holder.text2 = (TextView) convertView.findViewById(R.id.text2); 
     //holder.text3 = (TextView) convertView.findViewById(R.id.text3); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    //holder.text1.setText(items.get(position).getRestaurantName()); 
    //holder.text2.setText(items.get(position).getRestaurantGenre()); 
    //holder.text3.setText("08:00 - 18:00 Uhr"); 

    return convertView; 
} 
+0

快速提示:您应该使用'dp'而不是'sp'来布局布局,除非您特别擅长副作用,否则会导致某些用户配置。 –

+0

@MarcinOrlowski谢谢你的提示!只是有这么多的单位..:d – displayname

+0

“列表中的项目并没有改变它们的大小” - 这意味着你正在使用这个'RelativeLayout'在一个'ListView'或'RecyclerView'行。如果是这样,请将代码放在膨胀布局的位置。 – CommonsWare

回答

1
convertView = mInflater.inflate(R.layout.listview_nearbylist_item, null); 

您这里有两个问题:

  1. 我不知道在哪里mInflater从何而来,但getLayoutInflater()呼吁得到它你的活动,而不是任何其他来源。否则,主题不起作用。

  2. 使用inflate(R.layout.listview_nearbylist_item, parent, false),这可能会解决您的高度问题,并且如果没有其他问题可以避免基于RelativeLayout的行的其他问题。

+0

我不确定你的代码会做什么,但是如果我通过'convertView'这是'View'或者如果我通过'parent'这将是一个'ViewGroup',它会崩溃。 – displayname

+0

@StefanFalk:你是对的,因为它应该是'父母' - 我对我的错误表示歉意。但是,这应该工作得很好。更简单的,如果这是一个'ArrayAdapter',就是链接到超类,让它处理通货膨胀。 – CommonsWare

+2

@StefanFalk:顺便说一句,[史诗般的Dave Smith博客文章](http://possiblemobile.com/2013/05/layout-inflation-as-intended/)涵盖了这两个问题。特别是,它显示了如何不像我所描述的那样使用'inflate()'方法(至少,修正后的版本)给出了您正在遇到的确切问题。 – CommonsWare

0

您应该只使用sp来确定字体大小。对于其他一切,你需要使用dip。有关详细信息,请参阅What is the difference between "px", "dp", "dip" and "sp" on Android?

至于你的问题,请用蘸容器大小。只能将sp与textSize属性一起使用。你不应该有问题。

编辑:我也在你的布局注意到一些逻辑错误。你的第四个子部件(TextView)被设置为匹配父部件的大小 - 这将覆盖布局中的所有其他部分。你确定这是你想要的吗?这可以在技术上完成,但我不确定这是否是您的意图。

另外,在第一子部件(图像视图)应该既顶端对齐和父的底部。正如你所看到的,对于给定的尺寸,这不是可行的。有些东西将不得不改变。

+0

谢谢。另一位用户告诉我使用'dp'。猜猜我必须在那里阅读你的链接。我已经更新了我的问题。我试图设置'300dip' .. AS显示“*正确*”,但实时应用程序仍然没有做任何事情。我已经为'TextView'项目添加了一些填充,但这不是我打算这么做的。 – displayname

0

试试这个

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="200dip" 
android:padding="6sp" 
android:background="#ffffff">