我已经构建了一个自定义listView xml项目;但是,我没有得到我的预期...我改变了背景颜色,以更详细地显示第二张照片上发生的事情。
基本上,播放列表项应该延伸到屏幕的右侧,彩色文本应该全部位于屏幕的右侧(这就是Designer所显示的内容)。现在,彩色文本在歌曲标题结束的地方排成一行。
如何解决此问题?
预期结果
我正在做什么!
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="64dp"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imgSongThumbnail"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_weight="0"
android:contentDescription="@string/hello_world"
android:src="@drawable/crayonpop_barbarbar" />
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_weight="0" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
android:orientation="vertical" >
<TextView
android:id="@+id/txtSongName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:text="Bar Bar Bar Bar Bar Bar Bar"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#DDD" />
<TextView
android:id="@+id/txtGroupName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/group"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#DDD"
android:singleLine="true" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_gravity="end"
android:layout_margin="8dp"
android:gravity="bottom"
android:orientation="vertical" >
<TextView
android:id="@+id/txtSongMetaInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_weight="0"
android:text="@string/meta_data"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/holo_blue_bright"
android:textSize="12sp" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
更新
基于我之前,我修改了我的代码以遵循混合LinearLayout
x RelativeLayout
方案,之后我发现这里有一堆答案。 @yahya与我提出的几乎相同,所以我接受了这个答案,因为答案真的考虑了我在上面照片中提出的精确布局,注意减少使用大量的保证金代码。 / p>
以下是我的手机上的代码(下面再次与@yahya的答案非常相似)。继续......查看这些歌曲并享受;)
答案 0 :(得分:2)
我修改了您的布局,并减少了使用的嵌入式布局以改善您的视图层次结构
<?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="64dp"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imgSongThumbnail"
android:layout_width="64dp"
android:layout_height="64dp"
android:contentDescription="@string/hello_world"
android:src="@drawable/crayonpop_barbarbar" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_margin="8dp"
android:layout_height="match_parent" >
<TextView
android:id="@+id/txtSongName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:text="Bar Bar Bar Bar Bar Bar Bar"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#DDD" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/txtSongName"
android:orientation="horizontal"
android:gravity="right" >
<TextView
android:id="@+id/txtSongMetaInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_weight="0"
android:text="@string/meta_data"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/holo_blue_bright"
android:textSize="12sp" />
<TextView
android:id="@+id/txtGroupName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/group"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#DDD"
android:singleLine="true" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
答案 1 :(得分:1)
我建议您使用RelativeLayout而不是LinearLayout。使用RelativeLayout,您可以根据其他组件对齐组件。
在这种情况下,
id为txtSongName的主文本视图应将width设为match_parent。
txtGroupName
应使用layout_botton=@id/txtSongName
和txtSongMetaInfo
应使用layout_torightof=@id/txtGroupName
和android:layout_alignParentRight="true"
这样做的主要优点是减少了数字布局,从而提高了性能。
答案 2 :(得分:1)
以下是您的解决方案,只需复制下面符合您要求的代码即可。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/vw_grey_btn" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="false"
android:layout_centerVertical="true"
android:src="@drawable/logo" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="false"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/imageView1"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
由于声誉很低,我无法附上我的屏幕截图:
答案 3 :(得分:0)
删除ImageView上的重量,将FrameLayout的重量更改为1,将宽度更改为0dp,应该这样做。但仍然像@prijupaul建议的那样,使用RelativeLayout来减少视图的数量,特别是当它在ListView中时。顺便说一句,我建议你看看这个工具:jimulabs.com。
答案 4 :(得分:0)
你的布局膨胀代码是什么?
您应该使用类似的东西进行充气(假设您使用的是BaseAdapter)
convertView = mInflater.inflate(R.layout.XXXX, parent, false);
如果在膨胀时将null作为ViewGroup根传递,它将忽略根布局的fill_parent / match_parent参数并将其设置为wrap_content,从而为您提供结果。
即使看起来你已经得到了你想要的布局,但你应该确保你还在正确地充气。
答案 5 :(得分:0)
实际上,通过将所有子项放在一个RelativeLayout中,可以用更少的视图完成整个布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="64dp"
android:background="#333" >
<ImageView
android:id="@+id/imgSongThumbnail"
android:layout_width="64dp"
android:layout_height="64dp"
android:contentDescription="@string/hello_world"
android:src="@drawable/crayonpop_barbarbar" />
<TextView
android:id="@+id/txtSongName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:layout_toRightOf="@id/imgSongThumbnail"
android:ellipsize="middle"
android:singleLine="true"
android:text="Bar Bar Bar Bar Bar Bar Bar"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#DDD" />
<TextView
android:id="@+id/txtGroupName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/txtSongName"
android:layout_below="@id/txtSongName"
android:layout_marginBottom="8dp"
android:singleLine="true"
android:text="Sistar"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#DDD" />
<TextView
android:id="@+id/txtSongMetaInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/txtGroupName"
android:layout_alignRight="@id/txtSongName"
android:layout_gravity="end"
android:layout_weight="0"
android:text="Remix #1"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/holo_blue_bright"
android:textSize="12sp" />
</RelativeLayout>