利用布局FlowLayout修改设置里字符显示不全的问题
当容器的大小发生变化时,用FlowLayout管理的组件会发生变化,利用这个可以解决RelativeLayout布局中一些字符显示不全的问题--- /dev/null+++ b/alps/packages/apps/Settings/res/layout/preference_header_switch_item_linefeed.xml@@ -0,0 +1,79 @@++<!--+
·
当容器的大小发生变化时,用FlowLayout管理的组件会发生变化,利用这个可以解决RelativeLayout布局中一些字符显示不全的问题
--- /dev/null
+++ b/alps/packages/apps/Settings/res/layout/preference_header_switch_item_linefeed.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Layout of a header item in PreferenceActivity. -->
+<com.android.settings.FlowLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="48dp">
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="?android:attr/activatedBackgroundIndicator"
+ android:gravity="center_vertical"
+ android:minHeight="48dp"
+ android:paddingRight="?android:attr/scrollbarSize" >
+
+ <ImageView
+ android:id="@+id/icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_marginLeft="6dip"
+ android:layout_marginRight="6dip" />
+
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="6dip"
+ android:layout_marginLeft="2dip"
+ android:layout_marginRight="6dip"
+ android:layout_marginTop="6dip"
+ android:layout_weight="1" >
+
+ <TextView
+ android:id="@+android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceMedium" />
+
+ <TextView
+ android:id="@+android:id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignLeft="@android:id/title"
+ android:layout_below="@android:id/title"
+ android:ellipsize="end"
+ android:maxLines="2"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+ </RelativeLayout>
+ </LinearLayout>
+
+ <Switch
+ android:id="@+id/switchWidget"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:clickable="true"
+ android:focusable="false"
+ android:padding="8dip" />
+
+</com.android.settings.FlowLayout>
--- /dev/null
+++ b/alps/packages/apps/Settings/src/com/android/settings/FlowLayout.java
@@ -0,0 +1,84 @@
+package com.android.settings;
+
+import java.util.Hashtable;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.widget.RelativeLayout;
+
+public class FlowLayout extends RelativeLayout {
+ int mLeft,mRight,mTop,mBottom, curBottom;
+ Hashtable<View, Position> map = new Hashtable<View, FlowLayout.Position>();
+
+ public FlowLayout(Context context){
+ super(context);
+ }
+
+ public FlowLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ // TODO Auto-generated constructor stub
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ // TODO Auto-generated method stub
+// super.onLayout(changed, l, t, r, b);
+ int count = getChildCount();
+ for (int i = 0; i < count; i++) {
+ View child = getChildAt(i);
+ Position pos = map.get(child);
+ if (pos != null) {
+ child.layout(pos.left, pos.top, pos.right, pos.bottom);
+ } else {
+ Log.i("MyLayout", "error");
+ }
+ }
+ }
+
+ public int getPosition(int IndexInRow, int childIndex) {
+ if (IndexInRow > 0) {
+ return getPosition(IndexInRow - 1, childIndex - 1)
+ + getChildAt(childIndex - 1).getMeasuredWidth()+10;
+ }
+ return 0;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ // TODO Auto-generated method stub
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ mLeft = 0;
+ mRight = 0;
+ mTop = 0;
+ mBottom = 0;
+ int j = 0;
+ int count = getChildCount();
+ for (int i = 0; i < count; i++) {
+ Position position = new Position();
+ View view = getChildAt(i);
+ mLeft = getPosition(i - j, i);
+ mRight = mLeft + view.getMeasuredWidth();
+ if (mRight >= width) {
+ j = i;
+// mLeft = getPosition(i - j, i);
+ mLeft = width - view.getMeasuredWidth();
+ mRight = mLeft + view.getMeasuredWidth();
+ mTop += getChildAt(i).getMeasuredHeight();
+ }
+ mBottom = mTop + view.getMeasuredHeight();
+ position.left = mLeft;
+ position.top = mTop;
+ position.right = mRight;
+ position.bottom = mBottom;
+ map.put(view, position);
+ }
+ setMeasuredDimension(width, mBottom);
+ }
+
+ private class Position {
+ int left, top, right, bottom;
+}
+}
--- a/alps/packages/apps/Settings/src/com/android/settings/Settings.java
+++ b/alps/packages/apps/Settings/src/com/android/settings/Settings.java
@@ -522,7 +522,7 @@ public class Settings extends PreferenceActivity implements ButtonBarHandler {
break;
case HEADER_TYPE_SWITCH:
- view = mInflater.inflate(R.layout.preference_header_switch_item, parent,
+ view = mInflater.inflate(R.layout.preference_header_switch_item_linefeed, parent,
false);
holder.icon = (ImageView) view.findViewById(R.id.icon);
holder.title = (TextView)
更多推荐
已为社区贡献1条内容
所有评论(0)