我有以下布局(这很复杂,但我必须把它全部放在一边);我有3个LinearLayouts,水平,平铺png作为背景:2必须放在屏幕的顶部,最后一个放在屏幕的底部。在我必须放置一个小部件库。
我希望3个LinearLayouts可以获取用于背景的png的高度(首先是2,但不是最后调整大小的那个),并且画廊会占用屏幕的剩余大小。
我无法理解为什么调整第三个LinearLayout的大小。
非常感谢您的帮助。我在代码后面放了两张图片来了解情况。
<?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="fill_parent"
android:orientation="vertical">
<!-- THE FOLLOWING LAYOUT SHALL TAKE THE HEIGHT OF THE IMAGE USED FOR BACKGROUND
=> IT IS OK -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/bg_title"
android:gravity="center_horizontal">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/home_title"
android:textColor="@color/white"
android:gravity="center"
android:textSize="20sp"/>
</LinearLayout>
<!-- THE FOLLOWING LAYOUT SHALL TAKE THE HEIGHT OF THE IMAGE USED FOR BACKGROUND
=> IT IS OK -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/bg_channel_title">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/channels_frameLayout">
<HorizontalScrollView
android:id="@+id/channel_scrollView"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/channel_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
</LinearLayout>
</HorizontalScrollView>
</FrameLayout>
</LinearLayout>
<!-- THE FOLLOWING LAYOUT SHALL TAKE THE REMAINING HEIGHT OF THE SCREEN -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical"
android:id="@+id/description_frameLayout">
<Gallery xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
/>
</LinearLayout>
<!-- THE FOLLOWING LAYOUT SHALL BE PLACED ON THE BOTTOM OF THE SCREEN
AND TAKE THE HEIGHT OF THE IMAGE USED FOR BACKGROUND
=> IT IS NOK, THE LAYOUT IS RESIZED IN HEIGHT -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/bg_description"
android:id="@+id/description_layout"
android:gravity="bottom">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="left"
android:id="@+id/texts">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/orange"/>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="right"
android:id="@+id/btns">
<ImageButton
android:id="@+id/info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:src="@drawable/btn_info" />
<ImageButton
android:id="@+id/favorite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:src="@drawable/btn_favorite" />
</LinearLayout>
</LinearLayout>
答案 0 :(得分:0)
你放的所有地方 “android:layout_height =”0dp“”你有layout_weight =“1” 尝试: “机器人:layout_height =” WRAP_CONTENT “”
此外,您肯定会错过包含文件末尾图像按钮的布局中的android:layout_weight =“1”。
如果你的最后一个布局太大了,那是因为你的@ drawable / bg_description肯定有点大,这就是为什么如果你不想在图像按钮布局中放置android:layout_weight =“1”,只需减少你的可绘高度。
答案 1 :(得分:0)
好的,我尝试减少可绘制的高度;有用。 我不明白为什么。 上面的第一张图片来自Photoshop,我刚刚创建了一个工作区,其中包含我手机的大小,并在其中构建了我的组件,试图尊重一些宽高比。然后我只是拿起我的组件而不修改它们的大小,并在我的应用程序中将它们用作drawables。我期待在设备的屏幕上也能尊重宽高比。
它实际上是尊重两个第一个drawables(在顶部),但对于底部的那个我必须减少它...如果我这样做,它将在设备中工作,但在Photoshop中没有关系。
那又怎样?是否无法模拟我们的应用程序并在创建时使用图形组件?对我来说这很奇怪。
答案 2 :(得分:0)
我最终决定继续前进并找到另一种方法来解决我的问题。
现在一切都使用xml配置完成。
这是包含屏幕底部按钮的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/bg_description"
android:id="@+id/description_layout"
>
这是bg_description.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#919191" />
</shape>
</item>
<item android:top="1dp">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:endColor="#525252"
android:startColor="#1B1B1B"
android:angle="90"/>
</shape>
</item>
现在一切都很完美。背景很好地显示,渲染比png更好,并且不再调整问题。
平铺背景很好但是对于像这样的简单用例,我们必须通过xml配置考虑更好和最简单的解决方案。