我有一個簡單的進度欄視圖,我想動態更改寬度作爲父佈局的百分比。動態設置視圖寬度作爲父佈局的百分比
我看到有一組minimumWidth API。但是傳入的正確數字是什麼?我應該得到父寬度,然後只計算孩子的百分比和寬度,並將其作爲minimumWidth傳遞。
或者,這是隻有XML佈局代碼可實現的東西嗎?
我有一個簡單的進度欄視圖,我想動態更改寬度作爲父佈局的百分比。動態設置視圖寬度作爲父佈局的百分比
我看到有一組minimumWidth API。但是傳入的正確數字是什麼?我應該得到父寬度,然後只計算孩子的百分比和寬度,並將其作爲minimumWidth傳遞。
或者,這是隻有XML佈局代碼可實現的東西嗎?
android.support.percent.*包類如PercentRelativeLayout,目前已棄用
個該類在API層次26.1.0棄用。
請考慮使用ConstraintLayout和相關佈局。以下顯示如何使用ConstraintLayout複製百分比佈局的功能。該準則被用來定義每個百分比斷點,然後一個按鈕視圖拉伸以填充間隙:
只要使用ConstraintLayout與GuideLines
實施例:
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/left_guideline"
app:layout_constraintGuide_percent=".15"
android:orientation="vertical"/>
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/right_guideline"
app:layout_constraintGuide_percent=".85"
android:orientation="vertical"/>
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/top_guideline"
app:layout_constraintGuide_percent=".15"
android:orientation="horizontal"/>
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/bottom_guideline"
app:layout_constraintGuide_percent=".85"
android:orientation="horizontal"/>
<Button
android:text="Button"
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/button"
app:layout_constraintLeft_toLeftOf="@+id/left_guideline"
app:layout_constraintRight_toRightOf="@+id/right_guideline"
app:layout_constraintTop_toTopOf="@+id/top_guideline"
app:layout_constraintBottom_toBottomOf="@+id/bottom_guideline" />
</android.support.constraint.ConstraintLayout>
這是不通過使用在LinearLayout
權重的任何代碼實現的,如下所示:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="10"
android:orientation="horizontal">
<ProgressBar
android:layout_widthPercent="0dp"
android:layout_heightPercent="wrap_content"
android:weight="1"/>
</LinearLayout>
而且由於母體具有10個單位的總和和子將只需要那些如圖1所示,子實際上會有父母寬度的10%。
也可以通過PercentRelativeLayout使用支持庫的力量。其基本用法如下:
<android.support.percent.PercentRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
app:layout_widthPercent="50%"
app:layout_heightPercent="wrap_content"
app:layout_marginTopPercent="10%"/>
</android.support.percent.PercentRelativeLayout>
將它添加到你的項目,你需要在項目中包含的percent
支持庫。要做到這一點,包括在你的build.gradle
文件
compile 'com.android.support:percent:{lastest_support_library_version}'
以下行這從前人的精力代碼來完成,而不是從XML。
看代碼片段:
ProgressBar view_instance = (ProgressBar)findViewById(R.id.nutrition_bar_filled);
LayoutParams params=view_instance.getLayoutParams();
params.width=newOne;
view_instance.setLayoutParams(params);
現在,讓我們說你的XML是這樣的:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
您將使用上面的代碼是這樣的:
ProgressBar view_instance = (ProgressBar)findViewById(R.id.nutrition_bar_filled);
LinearLayout.LayoutParams params=(LinearLayout.LayoutParams)view_instance.getLayoutParams();
params.width= yourLinearLayout.getWidth()/100 * percent;
view_instance.setLayoutParams(params);