Android:自定义首选项屏幕大小问题

时间:2011-09-23 13:38:58

标签: android scrollview android-linearlayout banner

我正在使用自定义布局来显示首选项,以便我可以在屏幕底部插入广告横幅。我们的想法是让横幅贴在页面底部,并在滚动视图中将首选项显示在屏幕的其余部分。 我对首选项的高度有疑问。 我目前在下面的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>

3 个答案:

答案 0 :(得分:1)

在scrollview中使用属性“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>

答案 1 :(得分:0)

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

答案 2 :(得分: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",因此它位于广告视图之上。这将根据您的需要进行格式化。

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