1. 程式人生 > >databinding設定View的layout_width和layout_height屬性You must supply a layout_width attribute錯誤

databinding設定View的layout_width和layout_height屬性You must supply a layout_width attribute錯誤

        <TextView
            android:layout_width="@{@dimen/text_width}"
            android:layout_height="@{@dimen/text_height}"
            android:background="#e6e6e6"
            android:gravity="center"
            android:text="my girl!" />

dimens.xml檔案的內容:

    <dimen name="text_width">200dp</dimen>
    <dimen name="text_height">80dp</dimen>

執行之後,出現問題:


碰到這類錯誤,setter for attribute,基本就是屬性沒有對應的setter,需要我們使用@BindingAdapter等來弄一個方法,進行繫結。

或者方法的引數寫錯了。

這裡由於View裡面是不存在layout_widht和layout_height的屬性的,我們知道這個只有其實是通過父控制元件的佈局引數設定的。

所以需要設定@BindingAdapter。

    @BindingAdapter("android:layout_width")
    public static void setLayoutWidth(View view, float width) {
        ViewGroup.LayoutParams params = view.getLayoutParams();
        params.height = (int) width;
        view.setLayoutParams(params);
    }

    @BindingAdapter("android:layout_height")
    public static void setLayoutHeight(View view, float height) {
        ViewGroup.LayoutParams params = view.getLayoutParams();
        params.height = (int) height;
        view.setLayoutParams(params);
    }

執行發生Binary XML file line#49: You must supply a layout_width attribute的錯誤:


其實從圖中可以看到在DataBindingUtil.setContentView(this, R.layout.activity_main);初始化執行的時候,需要給對應TextView的屬性layout_width和layout_height設定值。

而這裡的setLayoutWidth()和setLayoutHeight()方法在初始化的時候並沒有執行,所以TextView的這兩個屬性是沒有值的。故報了上述的錯誤,解決方法也很簡單,

給一個預設值就可以了。

        <TextView
            android:layout_width="@{@dimen/text_width, [email protected]/text_width}"
            android:layout_height="@{@dimen/text_height, [email protected]/text_height}"
            android:background="#e6e6e6"
            android:gravity="center"
            android:text="my girl!" />

@BindingAdapter("android:layout_width")
public static void setLayoutWidth(View view, float width) {
    ViewGroup.LayoutParams params = view.getLayoutParams();
    params.height = (int) width;
    view.setLayoutParams(params);
}

@BindingAdapter("android:layout_height")
public static void setLayoutHeight(View view, float height) {
    ViewGroup.LayoutParams params = view.getLayoutParams();
    params.height = (int) height;
    view.setLayoutParams(params);
}

這樣子就可以了。

參考文章:

相關推薦

databinding設定View的layout_widthlayout_height屬性You must supply a layout_width attribute錯誤

<TextView android:layout_width="@{@dimen/text_width}" android:layout_height="@{@dimen/text_height}"

You must supply a layout_width attribute. 錯誤解決

佈局檔案如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:la

CSS設定文字段落屬性

字型屬性: Color: 顏色名稱/十六進位制/RGB碼  #FFF和#FFFFFF都表示白色 Font-family:字形名稱/字形名稱.... 可以有多個字形,但只取一個,從頭開始選直到找到一個

# tail -f /var/log/zabbix/zabbix_agentd.log sudo: sorry, you must have a tty to run sudo

方法 ret htm .html class efault sudoers div var /etc/sudoers 1)Defaults requiretty,修改為 #Defaults requiretty,表示不需要控制終端。 2)Def

異常:Unknown lifecycle phase "mvn". You must specify a valid lifecycle

color 啟動 fault 修改 compile spring col pre lifecycle 這是在使用maven打包方式啟動springboot項目時出現的異常, 我的異常原因屬於下面的情況: 此時maven指令行為:mvn spring-boot:run. 如果

筆記:Maven啟動報錯 - No goals have been specified for this build.You must specify a valid lifecycle phase

Maven啟動報錯: [ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-pr

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Y' with dtype float

  我發現一個問題,當你使用Tensorboard進行視覺化操作時: 如果你定義了        MERGED = tf.summary.merge_all();   這個操作,之後如果你單獨使用SESS.run([MERGED]),那麼就會報上

InvalidArgumentError: You must feed a value for placeholder tensor 'xxx' with dtype xxx and shape xx

InvalidArgumentError: You must feed a value for placeholder tensor 'xxx' with dtype xxx and shape xxx 發生原因 解決方法 發生原因 這個錯誤

sudo 問題:sorry, you must have a tty to run sudo

使用不同賬戶,執行執行指令碼時候sudo經常會碰到 sudo: sorry, you must have a tty to run sudo這個情況,其實修改一下sudo的配置就好了 vi /etc/sudoers (最好用visudo命令) 搜尋 Default require

Maven 錯誤: Unknown lifecycle phase ".ggstar". You must specify a valid lifecycle phase or a goal

一、問題描述 Windows下,需要將jar包手動匯入Maven本地倉庫,使用Power Shell執行命令: mvn install:install-file -Dfile="E:\Tools\ipdatabase\target\ipdatabase-1.0-SNA

sudo sorry you must have a tty to run sudo

32分是我所有的財產了..[[email protected] ~]$ crontab -l*/1 * * * * sudo /usr/sbin/lvscan 2>>/home/Abel/test [[email protected] ~]$ cat ~/test sudo:

錯誤:Unknown lifecycle phase "mvn". You must specify a valid lifecycle phase or a goal in the format

今天在eclipse上執行mvn 命令時遇到問題,報錯:[ERROR] Unknown lifecycle phase "mvn". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix&

TensorBoard報錯:InvalidArgumentError: You must feed a value for placeholder tensor 'inputs/x_input' wi

InvalidArgumentError: You must feed a value for placeholder tensor ‘inputs/x_input’ with dtype float [[Node: inputs/x_input = Pla

VS中設定逐過程執行屬性運算子

在VS除錯程式碼的時候,想進入關鍵系或者屬性的具體實現的時候會彈出這個視窗 點選“是”之後,vs就直接跳過關鍵字,即使逐語句也無法進入具體實現,下次還是繼續彈出這個視窗。 點選“否”之後,再次除錯的時候就不會提示這個視窗,但是還是無法逐語句的進行除錯。 原因: VS在不知道

Web開發——JavaScript庫(jQuery HTML——獲取/設定內容屬性(DOM操作) 續,需要整合在一起)

  3.2 text()、html() 以及 val()的回撥函式   上面的三個 jQuery 方法:text()、html() 以及 val(),同樣擁有回撥函式。回撥函式由兩個引數:被選元素列表中當前元素的下標,以及原始(舊的)值。然後以函式新值返回您希望使用的字串。   下面的例子演示

Web開發——JavaScript庫(jQuery HTML——獲取/設定內容屬性(DOM操作))

  jQuery 擁有可操作 HTML 元素和屬性的強大方法。 1、jQuery DOM 操作   jQuery 中非常重要的部分,就是操作 DOM 的能力。   jQuery 提供一系列與 DOM 相關的方法,這使訪問和操作元素和屬性變得很容易。   提示:DOM = Document Object

php類中為什麼設定setget方法操作屬性

php程式規範中會建議大家儘量將類中的屬性私有化,即定義為private變數,通過設定set和get函式來對屬性進行操作。一些人存在這樣的疑問,為什麼不直接將屬性設定為public,以後呼叫屬性時直接通過物件進行訪問不是更方便? 當然php中這樣做有它的原因: 1  將資

jQuery獲取設定checkbox的checked屬性小結

今天寫靜態頁面,需要拿jquery去控制checkbox的check屬性,開始用的attr,每次設定完成後,點開f12觀察elements,後面每次,無論怎麼點選checkbox,它的checked屬性都是選中的,於是上網查詢,得以解決,下面是是轉載的內容 在

java類中為什麼設定set get 方法操作屬性

樣例一: class person {       public String name ;       public String sex ; } 如上這麼一個類我們可以對它的實體進行:    起名操作,如     person1.name = "小明";   取名操作

UINavigationBar UITabBarItem 屬性設定

// 導航欄的背景顏色 [[UINavigationBarappearance] setBarTintColor:[UIColorcolorWithRed:25 / 255.0f green:17