2

我正在使用自定义布局来显示首选项,以便可以在屏幕底部插入广告横幅。这个想法是让横幅贴在页面底部,并在屏幕的其余部分以滚动视图的形式显示首选项。我对偏好所采用的高度有疑问。我目前在下面的 XML 布局中将其硬编码为“2000dip”。

它工作正常,横幅停留在底部,偏好在可滚动视图的顶部。

但是有一个硬编码的高度值是不好的,我希望它自动设置为首选项所采用的确切高度,因为目前它要么太短要么太长(在首选项之后有一个空白区域)。我试图用 wrap_content 或 fill_parent 替换硬编码值,但没有成功。任何想法?

在我的 PreferenceActivity 中,我包含了以下两行:

    setContentView(R.layout.preferences_scrollable);
    addPreferencesFromResource(R.layout.preferences);

我在xml文件preferences_scrollable.xml中定义了一个布局preferences_scrollable:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">

    <ScrollView android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:layout_weight="1"
        android:id="@+id/pref_scrollable_sv">

        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:orientation="vertical"
            android:id="@+id/pref_scrollable_ll">

            <ListView android:id="@android:id/list"
                android:layout_width="fill_parent" android:layout_height="2000dip">

            </ListView>
        </LinearLayout>
    </ScrollView>
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:orientation="vertical">
        <com.google.ads.AdView android:id="@+id/ad"
            ads:adSize="BANNER" android:layout_width="fill_parent"
            ads:loadAdOnCreate="true" ads:adUnitId="xxx"
            android:layout_height="wrap_content" 
            android:layout_weight="0"/>
    </LinearLayout>
</LinearLayout>
4

3 回答 3

1

在滚动视图中使用属性“android:fillViewport”使其具有正确的高度。所以这将是解决方案,除了使用此属性,视图不会滚动,或者滚动非常糟糕。对我来说看起来像一个Android错误。

无论如何,有效的解决方案是删除 ScrollView 并使用 LinearLayout (也支持滚动)。下面给出了正确使用顶部的可滚动首选项列表(由 Java 代码填充的内容)和底部的广告横幅的布局。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">

    <LinearLayout android:layout_width="fill_parent"
        android:id="@+id/ad_layout" android:layout_height="wrap_content"
        android:orientation="vertical" 
        android:layout_alignParentBottom="true">

        <com.google.ads.AdView android:id="@+id/ad"
            ads:adSize="BANNER" android:layout_width="fill_parent"
            ads:loadAdOnCreate="true" ads:adUnitId="xxx"
            android:layout_height="wrap_content" primaryTextColor="#FFFFFF"
            secondaryTextColor="#CCCCCC" />
    </LinearLayout>
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal"
        android:layout_above="@+id/ad_layout">

        <ListView android:id="@android:id/list" android:layout_width="fill_parent"
            android:layout_height="wrap_content">
        </ListView>
</LinearLayout>     
</RelativeLayout>
于 2011-10-23T13:19:12.060 回答
0

尝试<android:layout_marginRight="10dp" android:layout_marginBottom="10dp" android:layout_marginLeft="5dp>" 在布局属性中设置。

于 2011-09-23T13:46:00.917 回答
0

为您的外部布局使用 RelativeLayout。例子:

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

       <LinearLayout android:layout_alignParentBottom="true" android:id="@+id/adsLayout" ...>
           <!-- This is the ads part of it, which will remain the same as you have above-->
       </LinearLayout>
            <!-- You have to have the ads part first, so you are able to reference it with the scrollview -->
       <ScrollView .... android:layout_above="@+id/adsLayout">
          <!-- This ScrollView contents will remain the same -->
       </ScrollView>
   </RelativeLayout>

因此,在布局的广告部分,您android:layout_alignParentBottom="true"可以将其放在屏幕底部。然后在ScrollView,你放android:layout_above="@+id/adsLayout",所以它在广告视图上方。这将根据需要对其进行格式化。

那应该行得通。如果您有问题,请发表评论。

于 2011-10-04T03:53:48.567 回答