防止视图进入屏幕外

时间:2014-08-29 14:54:31

标签: android android-layout android-xml

我正在使用Google Maps API v2,并且我从InfoWindowAdapter覆盖getInfoContents()以获得自定义InfoWindow。在getInfoContents()内,我对包含ImageView和三个TextViews的xml进行了充气。

我的问题出现在snippet内设置的文字大于视图,然后在视图外设置的计数电视。以上是一些截图说明。

enter image description here enter image description here enter image description here

这是我的xml布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView 
        android:id="@+id/categoryIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignBottom="@+id/count"
        android:src="@drawable/ic_launcher"/>

    <LinearLayout
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_toRightOf="@+id/categoryIcon"
        android:layout_centerVertical="true"
        android:paddingLeft="10dp"
        android:paddingRight="10dp">

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Title"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/snippet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Snippet" />
    </LinearLayout>

    <TextView
        android:id="@+id/count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#111177"
        android:text="0"
        android:textSize="20sp"
        android:padding="10dp"
        android:textColor="#FFF"
        android:layout_toRightOf="@+id/text"
        android:singleLine="true" />

</RelativeLayout>

如何更改此布局以获取屏幕内的计数TextView以及多行中的片段?

我想要始终显示计数TextView。

更新: 最后,在Simon Marquis的回答中,我意识到了实现这一目标的方法。这里是新代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView 
        android:id="@+id/categoryIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignBottom="@+id/text"
        android:src="@drawable/ic_launcher"/>

    <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text"
        android:orientation="horizontal"
        android:gravity="center_vertical"
        android:layout_toRightOf="@+id/categoryIcon">

        <LinearLayout
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingLeft="10dp"
        android:paddingRight="10dp">

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Title"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/snippet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Snippeta" />
    </LinearLayout>

    <TextView
        android:id="@+id/count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#111177"
        android:text="0"
        android:textSize="20sp"
        android:padding="10dp"
        android:textColor="#FFF"
        android:singleLine="true" />

    </LinearLayout>

</RelativeLayout>

2 个答案:

答案 0 :(得分:2)

您应该将其添加到LinearLayout:

android:layout_width="0dp"
android:layout_weight="1"

新的布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView 
        android:id="@+id/categoryIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignBottom="@+id/count"
        android:src="@drawable/ic_launcher"/>

    <LinearLayout
        android:id="@+id/text"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_toRightOf="@+id/categoryIcon"
        android:layout_centerVertical="true"
        android:paddingLeft="10dp"
        android:paddingRight="10dp">

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Title"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/snippet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Snippet" />
    </LinearLayout>

    <TextView
        android:id="@+id/count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#111177"
        android:text="0"
        android:textSize="20sp"
        android:padding="10dp"
        android:textColor="#FFF"
        android:layout_toRightOf="@+id/text"
        android:singleLine="true" />

</RelativeLayout>

答案 1 :(得分:1)

如果您希望计数TextView始终显示在右侧,则可以使用以下一种解决方案:

  • 将计数文本视图放在LinearLayout之前并添加 的机器人:layout_alignParentRight =&#34;真&#34;
  • 在线性布局中添加 android:layout_toLeftOf =&#34; @ id / count&#34;

    <TextView
        android:id="@+id/count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="#00F"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@id/count"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
        <TextView
            android:id="@+id/snippet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
    </LinearLayout>