1. 程式人生 > >Android RelativeLayout中layout_marginBottom失效

Android RelativeLayout中layout_marginBottom失效

問題描述:

最近遇到一個詭異的問題,在自定義Dialog時,使用自己的xml佈局。

發現顯示異常,如圖:

佈局程式碼如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="280dp"
    android:layout_height="wrap_content"
    android:background="#FFFFFF" >

    <!-- title -->

    <RelativeLayout
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="33dp"
        android:background="#4AB6D9"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/warn"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginStart="8dp"
            android:layout_marginEnd="41dp"
            android:ellipsize="marquee"
            android:gravity="center"
            android:lines="1"
            android:singleLine="true"
            android:textColor="#EEEEEE"
            android:textSize="18sp" />

        <Button
            android:id="@+id/exit"
            android:layout_width="33dp"
            android:layout_height="33dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentTop="true"
            android:background="@drawable/disclaimer_dialog_exit" />
    </RelativeLayout>

    <!-- 內容 -->

    <ScrollView
        android:id="@+id/infoScroll"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/title" >

        <TextView
            android:id="@+id/dialog_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="26dip"
            android:layout_marginStart="26dip"
            android:layout_marginTop="17dp"
            android:textColor="#222222"
            android:textSize="18sp" />
    </ScrollView>

    <!-- 按鈕 -->

    <Button
        android:id="@+id/dialog_button_negative"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/infoScroll"
        <span style="color:#ff0000;">android:layout_marginBottom="17dp"</span>
        android:layout_marginStart="16dp"
        android:layout_marginTop="60dp"
        android:background="@drawable/disclaimer_dialog_cancle"
        android:text="@string/dialog_button_negative"
        android:textColor="#EEEEEE"
        android:textSize="16sp" />

    <Button
        android:id="@+id/dialog_button_positive"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_below="@+id/infoScroll"
        <span style="color:#ff0000;">android:layout_marginBottom="17dp"</span>
        android:layout_marginStart="6dp"
        android:layout_marginTop="60dp"
        android:layout_toEndOf="@+id/dialog_button_negative"
        android:background="@drawable/disclaimer_dialog_confirm"
        android:text="@string/dialog_button_positive"
        android:textColor="#EEEEEE"
        android:textSize="16sp" />

</RelativeLayout>

從圖中看出,

android:layout_marginBottom屬性沒有起作用。更詭異的是,只有部分手機有這個問題(用公司的測試機,只有兩臺有問題)。

對於這個問題,有多種解決辦法

1、給最外層的RelativeLayout設定android:paddingBottom="17dp"可以達到效果。

2、百度網友經驗,說是因為RelativeLayout最下面一個view,android:layout_marginBottom失效。

     在佈局下面再加一個0dp的view就好了,程式碼如下:

<View 
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_below="@+id/dialog_button_positive"
/>


效果如圖 3、給RelativeLayout最下面一個view包起來。程式碼如下:
<!-- 按鈕 -->

<LinearLayout 
android:id="@+id/launcher_default_button_layout"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:layout_alignParentStart="true"
	android:layout_below="@+id/infoScroll"
	android:orientation="horizontal">
        
	<Button
	android:id="@+id/dialog_button_negative"
	android:layout_width="120dp"
	android:layout_height="40dp"
	android:layout_marginBottom="17dp"
	android:layout_marginStart="16dp"
	android:layout_marginTop="60dp"
	android:background="@drawable/disclaimer_dialog_cancle"
	android:text="@string/dialog_button_negative"
	android:textColor="#EEEEEE"
	android:textSize="16sp" />

	<Button
	android:id="@+id/dialog_button_positive"
	android:layout_width="120dp"
	android:layout_height="40dp"
	android:layout_marginBottom="17dp"
	android:layout_marginStart="6dp"
	android:layout_marginTop="60dp"
	android:background="@drawable/disclaimer_dialog_confirm"
	android:text="@string/dialog_button_positive"
	android:textColor="#EEEEEE"
	android:textSize="16sp" />
</LinearLayout>


也可以得到同樣的效果。

總結:

這幾種方法的思路都是一樣的,從不同角度避開這個問題。根本原因沒找到,有哪位大神知道的請留言,謝謝。



相關推薦

Android RelativeLayoutlayout_marginBottom失效

問題描述: 最近遇到一個詭異的問題,在自定義Dialog時,使用自己的xml佈局。 發現顯示異常,如圖: 佈局程式碼如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andro

android RelativeLayoutandroid:layout_marginBottom的不起作用問題

RelativeLayout佈局中: 1、當設定為android:layout_height="wrap_content"時,最下面的控制元件layout_marginBottom屬性無效,如果其他控制元件使用layout_above讓自己處於最下面的控制元件之上,那麼layout_margi

Android RelativeLayout控制元件疊加顯示的問題

問題 在如下幾個場景我們需要控制元件的疊加顯示: 可滑動介面(ScrollView,ListView等)固定一個不會跟隨滑動的控制元件。 設定了visibility屬性的控制元件,當它需要顯示的時候總是顯示在最上層,而又不影響其他控制元件的位置。 碰到這些

Android開發activity跳轉動畫失效解決

最近在做一個app的時候需要修改activity跳轉動畫 使用網上推薦的 <!-- 新的Activity啟動時Enter動畫 --> <item name="android:activityOpenEnterAnimation">@

RelativeLayoutlayout_marginBottom屬性失效問題

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

Android-ViewPager呼叫notifyDataSetChanged失效問題--setItemPosition--POSITION_NONE

最基本的方法: 針對於child view比較簡單的情況(例如僅有TextView、ImageView等,沒有ListView等展示資料的情況),可以在自己的Adapter中加入程式碼: @Override public int getItemP

android webview呼叫了js的時候混淆失效問題

轉自他人: 今天有一個bug,就是打包簽名後,webview跟js互動的方法怎麼也調不起來,debug包沒有問題,release包就出錯,想想是打包時混淆的問題,打了一個不混淆的包,果不其然,就是混淆的問題。 然後就找解決方案,在proguard-project檔案中有這

Android開發有用工具之--Log工具類

util lena 日誌 日誌信息 stat 們的 常常 我們 imp 在開發的過程中。我們常常會使用Log來輸出日誌,幫助我們來調試程序 可是有時候並不能全然滿足我們的須要 ,比方我想知道這個日誌信息是來自於哪一個包 哪一個類 所以我們封裝一個這個Log類。方便我們的

unity3d開發的android應用增加AD系統的詳細步驟

查看 發的 b- sset @override 大小 代碼 nac cal unity3d開發的android應用中增加AD系統的詳細步驟 博客分類: Unity3d unity3d Unity3d已經支持android,怎樣在程序裏增加admob?

Android ScrollView嵌套ListView

() 固定 rgb don java and ada ldr androi 由於要做一個相似美團的團購產品。scrollview中還有嵌入listview,要是直接把listview嵌進scrollview中。listview的高度是固定的不能進行滑動。默認情況下And

android Service多線程交互

font set space ont detail const sel 子線程 啟動 android 的service和activity是執行在UI主線程的。在android線程中,僅僅有主線程即UI線程有自己的默認的消息隊列。子線程須要創建自己的消息隊列。並把消息發給

Android學習探索之Java 8 在Android 開發的應用

相關 概念 容易 並不是 min etc bstr trac flavor 前言: Java 8推出已經將近2年多了,引入很多革命性變化,加入了函數式編程的特征,使基於行為的編程成為可能,同時減化了各種設計模式的實現方式,是Java有史以來最重要的更新。但是Androi

android studio jni底層日誌的打印

添加 註意 erro ldl end 1.0 dto 字符 ati 1 添加ndk對log支持若需要添加ndk對log的支持,只需要通過以下2步即可實現。 1.1 修改Android.mk如生成的庫文件是“.so文件”,則在Android.mk中添加如下內容:LOCAL_L

android Service啟動Dialog

ams onclick finish ble 實現 dsm new app params 在Service 中彈出Dialog與在Activity中彈出Dialog的方式一樣,可是activity finish後,dialog也會隨著關閉。他是依附著

android開發如何使用JavaMail程序

有一個 pro 會話 jpg names prot get ext 會有  javaMail,是提供給開發者處理電子郵件相關的編程接口。它是Sun發布的用來處理email的API。它可以方便地執行一些常用的郵件傳輸。我們可以基於JavaMail開發出類似於Microsoft

android studio配置X5 webview時的一個坑

這也 default ips build 找到 沒有 androi lte sed 在接入X5的第二步中,需要配置so文件,這裏說一下遇到的坑 1. 需要把demo下載回來,不然你找不到so文件,找到so文件後放到自己相對應的目錄下邊,自己裏面那個目錄也沒有,所以和文件夾一

android studio使用recyclerview小白篇(三)

col gray sharp lead fin == ret size n) 繼續接著昨天的來,昨天終於弄好了一個例子,但是那個沒有點擊事件, 需要自己添加,參照別人的例子,弄了個比較簡單的,主要是改動myRecycleradatper.java中的部分. 增加如下的接口:

Android StudioGit和GitHub使用詳解

可能 必須 窗口 gin 擁有 說明 詳細 對話 發現   一、Git和GitHub簡述    1.Git    分布式版本控制系統,最先使用於Linux社區,是一個開源免費的版本控制系統,功能類似於SVN和CVS。Git與其他版本管理工具最大的區別點和優點就是分布式;  

Android設計的.9.png圖片

文字 圖. out 好的 .bat trac 左右 number lock .9.png是一種能夠自己定義拉伸特定區域的圖片格式。 簡書:Android設計中的.9.png圖片 在Android的UI設計開發中,非常多控件須要適配不同的手機分

Android Studio 的FindBugs插件使用,輕松幫你發現Bug (轉)

程序員 roi 捕獲 cas inter 常量 接下來 多線程 ndb 在日常開發過程中難免會因為一時疏忽而留下一些Bug,這些Bug就是埋在程序裏的定時炸彈,如果不能及時鏟除就會導致程序的不穩定,異常或閃退的現象,從而導致用戶的體驗的下降。那麽怎麽才能找出這些埋在程序