[置頂] 使用Android databinding進行動態布局

Kay16W 8年前發布 | 11K 次閱讀 Android開發 移動開發

來自: http://blog.csdn.net//guijiaoba/article/details/49182577


Google 最近公布了Android mvvm架構,可以使用databinding做些賦值和渲染界面的操作。

了解到Jsp中使用EL表達式,可以做些簡單的賦值和表達式運算。

然后我寫一個簡單的庫,可以使用Android的Databinding進行動態布局,布局的大小可以通過表達式來計算。

比如一個view的高度是屏幕寬度的三分之一,然后再減10dp。可以這樣使用。

width = "@{dimen.screenWidth/3 - dimen.dp(10)}"

下面是Github連接
AndroidSizeUtil

下面是文檔:

AndroidSizeUtil


Desc

AndroidSizeUtil is use android mvvm(databinding) architecture.
It is easy to compose layout, like html. Use percentage or expression in xml file to compose layout.

Usage

#1

Your app project must use android mvvm(databinding) architecture.
Android mvvm doc

#2

Gradle compile

repositories {
    maven {
        url "https://raw.githubusercontent.com/LiushuiXiaoxia/AndroidSizeUtil/master/repo/"
    }
}
compile 'cn.mycommons:androidsizeutil:1.0.0'

#3

Init AndroidSizeUtil in android Application or Activity.

public class AppContext extends Application {

@Override
public void onCreate() {
    super.onCreate();

    AndroidSizeUtil.init(this);
}

}</pre>

#4

Improt AndroidSizeUtil in xml.

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android=";

<data>

    <variable  name="dimen" type="cn.mycommons.androidsizeutil.DimenUtil" />
</data>

</layout></pre>

#5

Use dimen to compose view or layout like this.

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_height="@{dimen.csh/3}"
    app:layout_marginLeft="@{dimen.csw/3}"
    app:layout_marginTop="@{0}"
    app:layout_width="@{dimen.csw*2/3}" />

#6

Use databind in activity.
ContentMainBinding is generate java file by android databinding.

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ContentMainBinding.bind(findViewById(R.id.content_main)).setDimen(AndroidSizeUtil.newDimenUtil());
}

}</pre>

Api

Attributes set width, height, paddding, margin. The unit is px.

app:layout_width // set view width app:layout_height // set view height android:paddingLeft // set view paddingLeft android:paddingRight // set view paddingRight android:paddingTop // set view paddingTop android:paddingBottom // set view paddingBottom app:paddingLeft // set view paddingLeft app:paddingRight // set view paddingRight app:paddingTop // set view paddingTop app:paddingBottom // set view paddingBottom android:layout_marginLeft // set view layout_marginLeft android:layout_marginRight // set view layout_marginRight android:layout_marginTop // set view layout_marginTop android:layout_marginBottom // set view layout_marginBottom app:layout_marginLeft // set view layout_marginLeft app:layout_marginRight // set view layout_marginRight app:layout_marginTop // set view layout_marginTop app:layout_marginBottom // set view layout_marginBottom

Expression to set size.

// 100% screen width
app:layout_width="@{dimen.sw}"
app:layout_width="@{dimen.screenWidth}"

// 1/2 screen height app:layout_height="@{dimen.sh/2}" app:layout_height="@{dimen.screenHeight/2}"

// 100px app:layout_width="@{100}" app:layout_width="@{dimen.px(100)}"

// 100dp app:layout_width="@{dimen.dp(100)}"

// 100dp - 10px app:layout_width="@{dimen.dp(100)-10}"</pre>

Set view or layout size.

// 100dp * 100dp
app:size="@{dimen.sizeDp(100,100)}"

// 100px * 100px app:size="@{dimen.size(100,100)}"

// 100dp * 100px app:size="@{dimen.size(dimen.dp(100),100)}"

// screenWidth * 100px app:size="@{dimen.size(dimen.screenWidth,100)}"</pre>

Java api.

DimenUtil.java
LayoutUtil.java

Demo

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="

Demo

Gradle

repositories {
    maven {
        url "

compile 'cn.mycommons:androidsizeutil:1.0.0'</pre> </div>

 本文由用戶 Kay16W 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!