Articles of android layout

将项目添加到Fragment中的操作栏选项菜单后,进行方向更改后发生崩溃

我使用ActionBarSherlock和ViewPagerIndicator作为选项卡显示碎片。 其中一个碎片添加项目到ActionBar: private String[] mapNames; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); // init an String array `mapNames` which is used when populating submenu // … } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.fragment_maps, menu); SubMenu mapNamesMenu = menu.findItem(R.id.map_names).getSubMenu(); mapNamesMenu.clear(); for (int i=0; i<mapNames.length; i++) { mapNamesMenu.add(1, i, Menu.NONE, mapNames[i]); } super.onCreateOptionsMenu(menu, […]

重设偏好的默认值

我正在使用CheckBoxPreference设置屏幕。 XML是: <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <CheckBoxPreference android:key="includeAddress" android:title="Include Address" android:summary="" android:defaultValue="true" /> <CheckBoxPreference android:key="rememberName" android:title="Remeber Name" android:summary="" android:defaultValue="false" /> </PreferenceScreen> 我在应用程序中更改值。 一旦用户注销,它必须被设置为在xml中定义的默认值。 但是,这似乎并不奏效。 他们保留我最后select的那些价值。 读过Android文档后,我发现这个: PreferenceManager.setDefaultValues(getApplicationContext(), R.xml.preference_settings, true); 但是很难做到这一点! 尝试与SharedPreferences其他方式。 SharedPreferences preferences = getParent().getSharedPreferences("preference_settings", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.clear(); editor.commit(); 它也没有工作! 我错过了什么吗? 我怎样才能将偏好设置为在XML中定义的默认值? 提前致谢!

WRAP_CONTENT视图内的MATCH_PARENT视图

我明白, MATCH_PARENT意味着视图的大小与其父(减填充)一样大,而WRAP_CONTENT意味着视图的大小足以包含其内容(加上填充) 我的问题是,当一个MATCH_PARENT视图(视图A)被放在一个WRAP_CONTENT视图(视图B)中时会发生什么? 在这种情况下,如何计算两个视图A和B的参数?

Android:软键盘推高整体布局,需要调整列表视图

我有一个全屏聊天布局,我有一个标题顶部的标题,然后跟随listView与所有聊天消息,并在底部我有editText和buttom发送聊天消息。 现在当我点击editText的时候会发生什么,整个布局被推上去了。 我需要的是,带有标志的标题总是保持在原来的位置,而listView被resize。 这不是诀窍: android:windowSoftInputMode="adjustResize" 这也不是: android:windowSoftInputMode="adjustPan" 也许是因为我有一个完整的屏幕布局? 我需要find一种不同的方式来调整我的listView一旦键盘存在,任何想法? 提前致谢! 这是我的布局 <LinearLayout android:layout_width="match_parent" android:layout_height="70dp" android:background="@drawable/ss99_yellow_area_navigation_bar" android:baselineAligned="false" android:orientation="horizontal" > <ImageView android:id="@+id/back" android:layout_width="45dp" android:layout_height="match_parent" android:layout_marginBottom="10dp" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:adjustViewBounds="true" android:clickable="true" android:src="@drawable/ss99_button_back" /> <ImageView android:id="@+id/logo" android:layout_width="wrap_content" android:layout_height="75dp" android:layout_weight="1" android:adjustViewBounds="true" android:src="@drawable/ss99_logo_small" /> </LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="45dp" android:layout_marginTop="-2dp" android:background="@drawable/ss9_yellow_bar_chat_new" > <TextView android:id="@+id/userOpponent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="5dp" android:text="Medium Text" android:textAppearance="?android:attr/textAppearanceMedium" /> […]

GridView水平间距错误

我已经在我的XML布局文件中放置了一个GridView。 它在API 17-21上显示为我想要的英文(LTR)。但是,当我把语言翻译成阿拉伯文(RTL)时,horizo​​ntalSpacing在API 17-19上被忽略,但在API 21上被显示为我想要的。 模拟器和真正的Android设备上也出现了相同的行为。 XML代码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/services_home_main_layout" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/services_home_contents" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:layout_above="@+id/services_home_bottom_layout"> <GridView android:id="@+id/services_home_services_gridview" android:layout_width="match_parent" android:layout_height="match_parent" android:numColumns="3" android:horizontalSpacing="4dp" android:verticalSpacing="4dp" android:layout_margin="4dp" android:gravity="center" android:choiceMode="singleChoice" /> </LinearLayout> <LinearLayout android:id="@id/services_home_bottom_layout" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" /> </RelativeLayout> 项目的XML代码: <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/services_drawer_item_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:padding="4dp" android:background="@color/Gray_CC" android:drawableTop="@drawable/tall4" android:text="@string/app_name" /> 这是我的阿拉伯语(RTL)用户界面截图: 注意第一个屏幕截图中的水平间距

尽pipe设置属性,canvas绘图仍未正确绘制

我刚创build了2个图纸,试图让一个看起来像另一个,但我没有运气。 关于屏幕截图,顶部的graphics是使用canvas创build的,底部的graphics是使用XML创build的。 XML绘图是完美的,但不幸的是根据Android,我不应该使用它,因为它返回“太多的意见”的警告。 我已经尝试了以下方法的canvas绘图,但我仍然没有得到所需的结果。 我已经在十几个模拟器上testing了这个项目,尽pipeXML绘图有这么多的视图,但它们都只用了一秒钟就出现了。 根据设备的方向使用不同的图纸 使用浮点值而不是整数 调整浮点值多次 有谁知道有什么其他的select来解决这个令人讨厌的canvas问题,并确保canvas的绘制看起来与XML绘图完全一样,无论屏幕大小和方向? 在这种情况下,还应该忽略“太多的意见”的警告和/或我把查看次数限制增加到80以上? 所有相关的帮助将不胜感激。 Java代码 http://pastebin.com/VXgkJR2Z XML代码 http://pastebin.com/JyVvxS5n

将视图dynamic添加到GridLayout时,alignment方式不正确

当通过XML添加button – 一切都好 <GridLayout android:id="@+id/social_gl_content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:alignmentMode="alignBounds" android:columnCount="2" android:padding="8dp"> <LinearLayout android:layout_width="0dp" android:layout_height="45dp" android:layout_columnWeight="1"> <Button android:layout_width="fill_parent" android:layout_height="45dp" android:background="@android:color/holo_blue_light" android:text="Hi"/> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="45dp" android:layout_columnWeight="1"> <Button android:layout_width="fill_parent" android:layout_height="45dp" android:background="@android:color/holo_green_light" android:text="Whatsapp"/> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="45dp" android:layout_columnWeight="1"> <Button android:layout_width="match_parent" android:layout_height="45dp" android:background="@android:color/holo_green_light" android:text="This is facebook" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="45dp" android:layout_columnWeight="1"> <Button android:layout_width="match_parent" android:layout_height="45dp" android:background="@android:color/holo_blue_light" android:text="On" /> </LinearLayout> […]

将拖动项目实现到屏幕边缘function

当项目在屏幕边缘附近(左侧或右侧)拖动时,我需要实现当前的选项卡更改。 拖放N拖放function和当前标签开关没有问题。 我只是不能正确处理这个事件 – 当拖动项目靠近屏幕的边缘。 你会怎么做? 我试过的: <FrameLayout android:id="@+id/left_toggle_area" android:layout_width="30dp" android:layout_height="fill_parent" android:layout_alignParentStart="true" android:layout_alignParentLeft="true"> </FrameLayout> <FrameLayout android:id="@+id/right_toggle_area" android:layout_width="30dp" android:layout_height="fill_parent" android:layout_alignParentEnd="true" android:layout_alignParentRight="true"> </FrameLayout> <GridView android:layout_width="match_parent" android:layout_height="match_parent" … /> 这个想法是当在切换区域拖动项目时以编程方式改变当前标签。 但事件DragEvent.ACTION_DRAG_ENTERED在该地区从来没有发生,因为(我相信) GridView占据了整个屏幕,只是与切换区域重叠。 当拖动开始事件被触发时,我已经尝试将这些区域放在前面。 但是这不起作用。 FrameLayout toggleView = (FrameLayout) v; toggleView.bringToFront(); toggleView.requestLayout(); toggleView.invalidate(); 如果有人遇到这样的问题,请分享您的经验。 或者也许还有另一个更好的解决scheme。 请给我一个提示。

材质devise – 操作栏标题和内容的左边距不匹配

我试图按照Layout – Metrics和Keylines的指导设置屏幕边距。 具体来说,手机屏幕上的列表内容应该有72 dp的余量,并按照指南中的标题alignment: 由于Android Studio自动生成res / dimens.xml中的保证金值,我认为通过添加我自己的“内部”保证金,我可以让我的内容与标题保持一致: dimens.xml <resources> <!– Default screen margins, per the Android Design guidelines. –> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> <!– 16 + 56 = 72 = "Content left margin from screen edge" –> <dimen name="content_horizontal_margin">56dp</dimen> </resources> myactivity.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin"> <TextView android:id="@+id/tvEditPlaylistInfo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" […]

使用单个TableLayout而不是多个LinearLayouts作为TableRow的优势仅在于扩展了LinearLayout

我的列表查看项目由三列和三行组成。我使用了TableLayout。列之间的空间不统一,但是我通过设置页边空间来pipe理。现在布局看起来很完美。 <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="@dimen/dp18" android:paddingLeft="@dimen/dp16" android:paddingTop="@dimen/dp18" android:stretchColumns="0,1,2"> <TableRow> .. </TableRow> <TableRow> .. </TableRow> <TableRow> .. </TableRow> </TableLayout> 但是我想知道什么是理想的方法? 如果我已经使用了四个LinearLayout(一个外部水平线性布局和三个内部垂直线性布局),那么在优化和性能方面将会有什么不同? 由于TableRowinheritance了LinearLayout,所以我间接使用了LinearLayout。 那么, 使用单个TableLayout而不是多个LinearLayout的优点是什么,TableRow只能扩展LinearLayout?