--- 主持人注意:今天(7月15日),我注意到有人在这里遇到过这个问题.但是我不确定将这个作为副本关闭是否合适,因为我认为我提供了一个更好的解释.我不确定是否应该编辑其他问题并将其粘贴到那里,但我不太愿意过多地改变别人的问题.---
我有一些奇怪的东西.
我不认为问题取决于您构建的SDK.设备操作系统版本是重要的.
DatePickerDialog
在Jelly Bean中被更改了(?),现在只提供了一个Done按钮.以前的版本包括一个取消按钮,这可能会影响用户体验(不一致,以前Android版本的肌肉记忆).
复制:创建一个基本项目.把它放进去onCreate
:
DatePickerDialog picker = new DatePickerDialog(
this,
new OnDateSetListener() {
@Override
public void onDateSet(DatePicker v, int y, int m, int d) {
Log.d("Picker", "Set!");
}
},
2012, 6, 15);
picker.show();
Run Code Online (Sandbox Code Playgroud)
预期:在对话框中显示"取消"按钮.
当前:一个取消按钮不会出现.
Dialog会调用它应该调用的侦听器,然后始终调用OnDateSetListener
侦听器.取消仍然调用set方法,并设置它调用方法两次.
复制:使用#1代码,但在下面添加代码(您将看到这解决了#1,但只能在视觉上/ UI):
picker.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel",
new DialogInterface.OnClickListener() {
@Override
public …
Run Code Online (Sandbox Code Playgroud) android datepicker android-datepicker android-4.2-jelly-bean
在官方文档似乎并没有回答这个问题,或者我不明白.
元素(没关系AlertDialog
,它也发生在任何TextView上):
TextView tv = (TextView) dialog.findViewById(android.R.id.message);
Run Code Online (Sandbox Code Playgroud)
不一致性.案例A:
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
// or tv.setTextSize(14); does the same
Run Code Online (Sandbox Code Playgroud)
案例B:
tv.setTextSize(getResources().getDimension(R.dimen.text_size_small));
// TypedValue makes no difference either.
Run Code Online (Sandbox Code Playgroud)
values/dimens.xml
它在哪里:
<dimen name="text_size_small">14sp</dimen>
Run Code Online (Sandbox Code Playgroud)
结果:字体大小不一样,从资源检索时显得更大.我可能错过了什么,所以我的错误是什么,最重要的是:为什么?
- 更新到第一个答案 -
固定数字只是一个例子,因为没有人会在代码中硬编码固定的字体大小.那么让我重新解释一下这个问题:
为什么如果从代码中获取资源,文本大小比从XML布局获取资源时要大?此外,问题仍然是相同的:如何在代码中检索14sp单元并使其与布局XML中设置的14sp单元保持一致?我没有接受答案,因为它没有告诉我如何在代码中使用资源中的sp单位来处理文本大小.
在此布局上,即使尺寸相同,字体大小也不同:
<TextView
android:id="@+id/my_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/TextBody" />
Run Code Online (Sandbox Code Playgroud)
styles.xml:
<style name="TextBody">
<item name="android:textSize">@dimen/text_size_small</item>
<item name="android:lineSpacingMultiplier">1.1</item>
<item name="android:textColor">@color/body_text_1</item>
<item name="android:textIsSelectable">true</item>
<item name="android:linksClickable">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)
看到text_size_small吗?为什么在这种情况下字体大小比使用相同dimen
资源的代码小?
对不起,巨大的代码转储,但我真的迷路了.
MyActivity.java onCreate:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_singlepane_empty);
mFragment = new PlacesFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.root_container, mFragment)
.commit();
Run Code Online (Sandbox Code Playgroud)
PlacesFragment.java onCreateView:
mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
return mRootView;
Run Code Online (Sandbox Code Playgroud)
注意:mRootView是一个ViewGroup全局,我相信没问题.PlacesFragment是一个ListFragment.
布局:
activity_singlepane_empty.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_container"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00f">
<include layout="@layout/actionbar"/>
<!-- FRAGMENTS COME HERE! See match_parent above -->
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
list_content.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listContainer"
android:background="#990"
>
<ListView android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawSelectorOnTop="false" />
<TextView android:id="@id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/no_data_suggest_connection"/>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
问题:正如您所看到的,预期的行为是将上面的空TextView显示在屏幕中心.在Eclipse的设计预览中,没关系.只有当作为片段添加到root_view时,FrameLayout才会填满整个屏幕.
root_container为蓝色,FrameLayout为黄色,请参阅下面的调试目的.黄色窗格不应该填满整个屏幕吗?!?!?!?
android center fragment android-linearlayout android-framelayout
在尝试理解(相当新的)Android设计网站的Metrics and Grids页面之后,我放弃了很多东西.所以,基本上,我正在尝试找到Android 4中使用的原始布局,以便我可以应用相同的概念.
为了使这个问题更加客观和下计算器的"过宽"斧头不会失败,我问你用来重新布局,准确和完整,该网页上的例子.Google是否在样本中提供了这些内容?也许是一个着名的教学存储库,努力符合标准?
仅作为示例,不清楚如何重新创建"48/3指标"(16/16/16)以使文本适合它.如果我想使用1行小文本怎么办?它是16/wrap_content/16还是16/16/16才能使它与集合周围的其他布局保持一致?如果...
我相信这不仅有助于小型开发者,而且最重要的是,有助于标准化Android Play中应用的外观和感觉.该网站是一个良好的开端,但远非理想.
添加细节
我从来没有问过这么多的投票问题,我甚至没想到(我还有其他问题,我认为"更好",但到目前为止还没有那么多的投票和赞成).当然,并不是说我关心投票,而是表明对我所要求的东西有很大的需求(这里有一点广告,但仍然......).
对评论的回复
@ Ricardo Amaral:
如果我不够清楚,我真的很抱歉:
@ Michael Slade:
我知道他们是一些例子,他们可能已经从模板中进行了线框化.如上所述,我已经重用了SDK中的代码,我知道它们只是示例,我们可以偏离它们.再说,经过这么久,没有人回答.
选择性受益于精确度.这就是我想说的问题.因为这是一个建议并不意味着它的指导方针可以是你想要的任何东西.如果你这样做,那就不再是推荐了.顺便提一下,这就是建议的全部要点:在不强迫任何人的情况下提供实施理论.
感谢大家!
我有一个CheckBox
我想要在自己的边界内居中,而不是被推到一边.可能比解释更容易证明:
请注意,它不居中.目前定义为:
<CheckBox
android:id="@+id/checkbox_star"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:button="@drawable/btn_favorite"
android:layout_gravity="center"
android:minWidth="48dp" />
Run Code Online (Sandbox Code Playgroud)
没关系自定义按钮drawable.它与香草的行为相同CheckBox
(小复选框的行为相同).
我的问题使用Java作为例子,但我想它可能适用于所有.
在比较布尔值时,XOR运算符(在java中是^)和NOT-EQUAL-TO(在java中是!=)之间是否存在实际差异?
我在这里评估了一些东西,但我一直在想(似乎很奇怪,两件事情相等)......并且没有在网上找到任何东西.在一些论坛中只有一次讨论快速结束而没有任何结果.
不知怎的,我无法让我的UTF-8资源与Ant玩得很好.
我得到了很多"警告:编码ascii的不可映射的字符".我真的很疯狂.小时,小时和小时.顺便说一句,我注意到有5个人已经疯狂地使用了标签.:-)
是的,我已经读过这个,这个和其他人.Google也是(至少3个或4个不同搜索的前5页结果).有javac选项.我试过了.还有一些预设或东西(对不起,凌晨3点).也没用.
我正在使用Ant生成Android apk文件.我不能使用Eclipse,所以没有.顺便说一句,ant文档对我来说是胡言乱语.这些例子完全没用.我已经不记得我尝试了多少.
我尝试使用Dfile.encoding选项,尝试将其与CHCP 65001 Windows命令混合使用.做了所有的组合,它甚至让Ant(Javac我猜)停止吐痰错误,但它仍然没关系.我的代码仍然以垃圾carachters(一堆??而不是á,í等)结束.
简而言之,是否有可能告诉a中的孩子RelativeLayout
始终匹配其高度,而RelativeLayout
不管其他孩子的RelativeLayout
行为如何?简而言之,就是这样.详情如下.
我想要实现的是一个ListView
至少有三个视图的行,其中一个视图在列表条目的右侧是一种条带(下面的红色视图).我遇到的问题是TextView
左侧有一个,并且根据我有多少文本,条纹不会填满整个布局.下面的图片非常清楚地解释了这一点.
ListView
项目布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<View
android:id="@+id/bottom_line"
android:layout_width="match_parent"
android:layout_height="5dp"
android:layout_alignParentBottom="true"
android:background="#fc0" />
<!-- Why match_parent does not work in view below? -->
<View
android:id="@+id/stripe"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:minHeight="50dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:background="#f00" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@id/stripe"
android:text="This is a very long line, meant to completely break the match_parent property of the box at right"
style="?android:textAppearanceLarge"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
结果:
match_parent
没有区别.我做的.重复这个问题,我希望红色条纹始终垂直填充父级.您可以看到条带未对齐到根的顶部.
注意:上面的例子是我能想到的最简单,最独立的例子.它只是一个由静态数组填充ListActivity …
在Android Studio 0.2.0中,每当我在build.gradle
文件中输入任何内容时,Gradle都会决定重建时间.这需要很长时间,会产生噪音并导致电池寿命延长.它永远不会结束,至少在我完成编辑文件之前......总是在我打字时重建.幸运的是我使用Ubuntu有足够的空闲内存.
所以... 我想停用任何自动制作的选项.这是我到目前为止所尝试的:
什么都行不通.我想要一种只在我问的时候建造的方法.就像带按钮的手动模式一样.这样的事情.
我理解Android Studio并且整个构建系统非常新,有很多粗糙的边缘,但我希望它只是某个文件中某个模糊标记定义的问题.
以前的研究: 这个问题没有提供足够的细节或目标,所以我自己做了.这个G +线程也是一个死胡同.我仍然习惯了新的东西,可能会丢失搜索(即错过正确的关键字等),所以如果没有关于此问题的更新,请提前抱歉.
谢谢.
我有一个几乎完成的应用程序与非平凡的活动结构.有与此应用程序关联的推送通知,并且无论应用程序是前台/后台/未激活,选择通知条目都应该启动特定活动.
如果应用程序未处于活动状态,我可以成功启动应用程序并自动导航到相应的部分.但是,当应用程序处于活动状态时,我遇到了问题.我将提出问题的简化版本,以传达问题的本质,我将根据需要发布我的应用程序的活动结构和相关代码的详细信息(实际上,现在正在处理).
所以,我的应用程序的活动堆栈(大大简化)看起来像这样:
A - > B - > X.
其中A,根活动,是一个登录页面; B是"主页",X是可以从主页启动的几个活动之一(但一次只有一个活动;因为这些只能从B开始).
当选择通知时,我需要应用程序自动导航到B,无论事先处于什么状态 - 无论是[A],[A - > B],[A - > B - > X]还是[](应用程序未激活).
我的通知将Intent传递给活动A.我尝试过使用CLEAR_TOP和NEW_TASK标志,但没有.目前有launchmode = singleTask.这样做,我想我正在解决所有可能的现有堆栈配置并将它们减少到[A].Intent还带有一个额外的内容,它将其标识为来自通知,而不是通常的发布.
活动A,在识别出从通知发送的Intent时(它可以在onCreate()和onNewIntent()中执行此操作),将Intent发送到Activity B.此Intent包含CLEAR_TOP和SINGLE_TOP.B有launchmode = singleTop.
95%的时间,这可以按照需要工作,按下通知后,应用程序的堆栈为[A - > B].大约5%的时间,应用程序不知何故最终得到一堆[A - > B - > B].
关于这里发生了什么,或者我做错了什么的任何想法?
如果事实证明这是一个非常重要的问题,我会发布更多细节.事实上,现在发布更多细节......
~~~~~~~~~~~~~~~~~~~~~~~详细信息~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
单步执行调试器会显示,每次A将其意图发送给B时,现有的B实例都是onDestroy(),然后才能进入onCreate(),然后调用onNewIntent().这对我来说似乎很奇怪,并且暗示我误解了我正在使用的标志(CLEAR_TOP和SINGLE_TOP),或者其他东西正在干扰它们.
我没有成功地在调试中重现错误的堆栈结构.不确定是不是因为它没有在调试中发生,或者我没有尝试过足够的次数.
意图代码:
在C2DM接收器服务中:
protected void onMessage(Context context, Intent intent) {
int icon = R.drawable.some_drawable;
CharSequence tickerText = "blah";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
//Context context = getApplicationContext(); //Don't …
Run Code Online (Sandbox Code Playgroud)