QSPanel - 修改 QS Layout 布局
说明
本文档提供三种布局的修改.
修改源码
- 修改 BrightnessSeekbar 和 Tiles 的位置
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -45,6 +45,8 @@ import com.android.systemui.statusbar.policy.BrightnessMirrorController;
import java.util.ArrayList;
import java.util.Collection;
+import com.android.systemui.utils.XMLUtils;
+
/** View that represents the quick settings tile panel. **/
public class QSPanel extends ViewGroup {
private static final float TILE_ASPECT = 1.2f;
@@ -486,7 +488,9 @@ public class QSPanel extends ViewGroup {
record.tileView.measure(exactly(cw), exactly(ch));
previousView = record.tileView.updateAccessibilityOrder(previousView);
}
- int h = rows == 0 ? brightnessHeight : (getRowTop(rows) + mPanelPaddingBottom);
+ int h = rows == 0 ? brightnessHeight : (getRowTop(rows) + mPanelPaddingBottom +
+ (mSwapBrightnessLocation ? brightnessHeight : 0));
+
if (mFooter.hasFooter()) {
h += mFooter.getView().getMeasuredHeight();
}
@@ -501,13 +505,13 @@ public class QSPanel extends ViewGroup {
private static int exactly(int size) {
return MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY);
}
-
+
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
final int w = getWidth();
- mBrightnessView.layout(0, mBrightnessPaddingTop,
- mBrightnessView.getMeasuredWidth(),
- mBrightnessPaddingTop + mBrightnessView.getMeasuredHeight());
+ //mBrightnessView.layout(0, mBrightnessPaddingTop,
+ // mBrightnessView.getMeasuredWidth(),
+ // mBrightnessPaddingTop + mBrightnessView.getMeasuredHeight());
boolean isRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
for (TileRecord record : mRecords) {
if (record.tileView.getVisibility() == GONE) continue;
@@ -526,6 +530,20 @@ public class QSPanel extends ViewGroup {
}
record.tileView.layout(left, top, right, top + record.tileView.getMeasuredHeight());
}
+
+ if (!mRecords.isEmpty() && mSwapBrightnessLocation) {
+ TileRecord record = mRecords.get(mRecords.size() - 1);
+ int brightnessTop = record.tileView.getMeasuredHeight() + mBrightnessPaddingTop;
+
+ mBrightnessView.layout(0, brightnessTop,
+ mBrightnessView.getMeasuredWidth(),
+ brightnessTop + mBrightnessView.getMeasuredHeight());
+ } else {
+ mBrightnessView.layout(0, mBrightnessPaddingTop,
+ mBrightnessView.getMeasuredWidth(),
+ mBrightnessPaddingTop + mBrightnessView.getMeasuredHeight());
+ }
+
final int dh = Math.max(mDetail.getMeasuredHeight(), getMeasuredHeight());
mDetail.layout(0, 0, mDetail.getMeasuredWidth(), dh);
if (mFooter.hasFooter()) {
@@ -535,12 +553,17 @@ public class QSPanel extends ViewGroup {
}
}
+ private static final boolean mSwapBrightnessLocation = XMLUtils.getInstance().checkMatch(
+ XMLUtils.Group.GROUP_QSPANEL_SWITCH, XMLUtils.Attr.ATTR_ASSET_CHOOSE, XMLUtils.Policy.POLICY_SWAP_SEEKBAR_TILES);
+
private int getRowTop(int row) {
- if (row <= 0) return mBrightnessView.getMeasuredHeight() + mBrightnessPaddingTop;
- return mBrightnessView.getMeasuredHeight() + mBrightnessPaddingTop
- + mLargeCellHeight - mDualTileUnderlap + (row - 1) * mCellHeight;
+ final int brightnessHeight = mSwapBrightnessLocation ?
+ 0 : (mBrightnessView.getMeasuredHeight() + mBrightnessPaddingTop);
+
+ if (row <= 0) return brightnessHeight;
+ return brightnessHeight + mLargeCellHeight - mDualTileUnderlap + (row - 1) * mCellHeight;
}
-
+
private int getColumnCount(int row) {
int cols = 0;
for (TileRecord record : mRecords) {
- 修改 Tiles 的大小
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index d4c5298..cdedd3f 100755
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -164,7 +164,7 @@
<dimen name="pull_span_min">25dp</dimen>
<dimen name="qs_tile_height">88dp</dimen>
- <dimen name="qs_tile_icon_size">24dp</dimen>
+ <dimen name="qs_tile_icon_size">32dp</dimen>
<dimen name="qs_tile_text_size">12sp</dimen>
<dimen name="qs_tile_divider_height">1dp</dimen>
<dimen name="qs_panel_padding">16dp</dimen>
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
index 79f3c0a..d051068 100755
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
@@ -55,7 +55,7 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> {
@Override
public boolean supportsDualTargets() {
- return true;
+ return false;
}
@Override
- 修改 Tiles 一行的个数
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 4e67655..9e57db6 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -106,7 +106,7 @@
<integer name="config_recent_item_min_alpha">3</integer>
<!-- The number of columns in the QuickSettings -->
- <integer name="quick_settings_num_columns">3</integer>
+ <integer name="quick_settings_num_columns">4</integer>
<!-- The maximum number of rows in the QuickSettings -->
<integer name="quick_settings_max_rows">4</integer>