我正在使用自定义布局来显示首选项,以便我可以在屏幕底部插入广告横幅。我们的想法是让横幅贴在页面底部,并在滚动视图中将首选项显示在屏幕的其余部分。 我对首选项的高度有疑问。 我目前在下面的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>
答案 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"
,因此它位于广告视图之上。这将根据您的需要进行格式化。
那应该有用。如果您有问题,请发表评论。