Articles of android layout

是否有可能重新使用Kotlin Anko的布局

我读到使用Anko的最大好处是它的可重用性。 但我无法find确切的例子。 目前在新的Android布局系统中,锅炉板如下: DrawerLayout (with some setup) CoordinatorLayout (with some setup) AppBarLayout (with some setup) ToolBar <The Main Content> NavigationView (with header inflated) 从上面的布局结构来看,只有<The Main Content>是varry。 在很多情况下,这些仪式设置几乎在每个活动中都重复着。 所以在这里与安科即时思考如果有一个可重用的解决scheme关于这个问题。 我不期望它可以重复使用的通用布局,但至less我可以尽量减less项目中的仪式代码。 也许我需要像这样的东西: class MainUI: AnkoComponent<MainActivity> { override fun createView(ui: AnkoContext<MainActivity>): View{ return with(ui) { myCustomRootLayout { //here is what <The Main Content> will be } } } […]

为ListView强制onSizeChanged

我有一个listviewdynamic分配不同的数据集。 这工作正常。 我也使fastScrollEnabled是真实的。 为了更新sectionIndexer,我需要调用 list.setFastScrollEnabled(false); list.setFastScrollEnabled(true); 问题是索引显示在左上angular,这是一个知道的问题。 作为解决方法,每当我改变方向索引再次正确显示。 为了testing这个我已经实现了一个自定义ListView,观察是如果我可以强制listView调用onSizeChanged()它会正常显示。 现在的问题是: 是否有可能强制listView调用onSizeChanged()方法? 如果是的话我们怎么能做到这一点。 有没有人知道onSizeChanged()被调用时的条件。 当方向改变,我们可以想到的任何其他条件时,这绝对是被调用的。

Android:RadioGroup下的嵌套布局中的RadioButton不在Group中

我试图对RadioGroup的一部分我的单选button做一些合理的定位。 当我的RadioGroup坐在我的布局devise的其余部分之上时,我遇到了麻烦,然后我使用边距来推动button,问题在于这只适用于一个或两个设备布局。 当我发现我可以定义我的RadioGroup,然后在下面的一个RelativeLayout中,包含其中一个RadioButton,然后再重复两次,我想我已经击中了黄金。 这给了我想要的布局。 问题是,当我运行代码时,RadioButtons链接独立button:( 所以有两个问题, 我可以链接这些button回到组? 有没有一种体面的方法可以独立于组来定义RadioGroup Radiobutton的布局。 我想一个替代品可能是独立的RadioButtons,并使用代码来启用/禁用它们,但是这种做法有损于RadioGroup的有用性。 谢谢。 这是我的XML布局,你应该好奇。 <ScrollView android:id="@+id/scrollview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_below="@id/HDDResultsBox" > <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:focusable="true" android:focusableInTouchMode="true" android:windowSoftInputMode="stateHidden" > <RadioGroup android:id="@+id/calcBy" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:focusable="true" android:focusableInTouchMode="true" android:layout_below="@id/HDDResultsBox" > <RelativeLayout android:id="@+id/intervalBox" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/backgroundbox" android:layout_margin="5dp" android:padding="5dp" > <TextView android:id="@+id/intervalHeader" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Interval" android:gravity="left" android:textColor="#ffffff" android:textStyle="bold" android:layout_marginLeft="5dp" /> <TextView […]

一旦高度为0,LinearyLayout将不会resize

有一个奇怪的。 我已经把它放到一个非常简单的例子。 真的搞不清楚了。 LinearLayout中有一个LinearLayout。 我想用一个animation来调整孩子的大小(有时候我有一种享受)。 这是我的布局XML。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <!– Lots more controls will appear above –> <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:id="@+id/animation_subject"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:gravity="center" /> </LinearLayout> <!– Lots more controls will appear below –> </LinearLayout> <Button android:text="Slide it Down!" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="btnDoAnimDown_OnClick" /> […]

何时使用ImageButton而不是ImageView?

我有一个关于ImageButton的困惑。 我可以使ImageView可点击并用作button,那么为什么我们明确需要一个ImageButton ? 在deviseAndroid应用程序时,我发现ImageView比ImageButton更有用,也许我错过了ImageButton一些function。 所以我想知道使用ImageButton的优点是什么? 谢谢。

android onCreateOptionsMenu在恢复状态时调用两次

下面是我创build的一个简单的Android应用程序来演示我的问题: public class OptionMenuTest extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("test", "create activity"); setContentView(R.layout.options_layout); if(getFragmentManager().findFragmentByTag("frag") == null) { getFragmentManager().beginTransaction().add(R.id.option_fragment_container, new OptionMenuFragment(), "frag").commit(); } } @Override protected void onSaveInstanceState(Bundle outState) { Log.d("test", "saving Activity state"); super.onSaveInstanceState(outState); } @Override public boolean onCreateOptionsMenu(Menu menu) { Log.d("test", "create Activity options menu"); menu.add("activity"); return true; } […]

如何在Android 4.0默认日历中添加事件?

在Android 4.0默认日历中,如果我们想要移动到下个月,那么我们需要滚动日历,但我需要通过按上面的图像中存在的箭头移动到下一个或上个月。 而且我想添加到默认的日历。 如果添加事件,那么该date应该像在图像中被标记。 我用这个CalendarView。 <CalendarView android:id="@+id/calendarView1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" /> 我想知道如何使用添加事件到这个CalendarView务实。

有关布局别名的Android文档不正确?

我想弄清楚如何重新使用或“别名”与最less的样板代码的布局。 看起来有关布局别名的Android文档是不正确的,而且肯定会出现不一致。 这部分文档以下面的布局文件为例: <resources> <item name="main" type="layout">@layout/main_twopanes</item> </resources> 如果我尝试编译这个,我得到一个Attribute is missing the Android namespace prefix错误。 即使在将resources元素添加到名称空间之后,我也会收到error: Error: String types not allowed (at 'type' with value 'layout'). 在Android文档的其他地方 ,他们显示了一个不同的,看似颠倒和不正确的方式来别名布局: 要为现有布局创build别名,请使用包装在<merge>的元素。 例如: <?xml version="1.0" encoding="utf-8"?> <merge> <include layout="@layout/main_ltr"/> </merge> 运行此结果在LogCat E/AndroidRuntime(1558): android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true中出现以下错误E/AndroidRuntime(1558): android.view.InflateException: <merge […]

只在必要时才在特定位置添加换行符

在我的Android布局,我有一个TextView,使用一半的可用宽度的屏幕。 在运行时,我将文本设置为(长)电子邮件地址。 例如: googleandroiddeveloper@gmail.com 如果文本不符合一行,Android将插入换行符,这是所需的行为。 但是,换行符的位置在第一个不符合该行的字符之前。 结果可能是这样的: googleandroiddeveloper@gmai l.com 我认为,这是一种丑陋,特别是在电子邮件地址。 我希望换行符出现在@字符之前: googleandroiddeveloper @gmail.com 当然,我可以在我的strings.xml添加一个\n 。 但是,那么电子邮件地址在每一种情况下都会使用两行,即使它适合一行。 我以为我已经find了在电子邮件地址中添加一个零宽度空间( \u200B )的解决scheme。 <string name="email">googleandroiddeveloper\u200B@gmail.com</string> 但除了使用标准空格,Android不会将特殊空格字符检测为易碎空间,因此此时不会添加换行符。 由于我在应用程序的多个地方处理了许多电子邮件地址,因此我正在寻找一种解决scheme,在@字符之前添加易碎和不可见的空间,所以如果不适合一行,则Android会封装电子邮件地址。

在ViewPager中的PagerTabStrip位置

我有以下代码: <android.support.v4.view.ViewPager android:id="@+id/main_pager" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.PagerTabStrip android:id="@+id/pager_tab_strip" android:layout_width="match_parent" android:layout_height="wrap_content" /> </android.support.v4.view.ViewPager> 一切都得到了应有的地位。 我现在想要的是, PagerTabStrip覆盖ViewPager 。 它应该在顶部呈现,而不占用任何布局空间。 基本上,ViewPager中的片段应该像PagerTabStrip所做的那样从0,0开始。 任何帮助赞赏。 谢谢!