供参考:http: //developer.android.com/guide/practices/screens_support.html
旧样式大小量词是"已弃用":
一组四种通用尺寸:小尺寸,普通尺寸,大尺寸和xlarge注意:从Android 3.2(API级别13)开始,不推荐使用这些尺寸组,而采用基于可用屏幕宽度管理屏幕尺寸的新技术.如果您正在为Android 3.2及更高版本开发,请参阅为Android 3.2声明平板电脑布局以获取更多信息.
我希望3.2+的设备仍然使用drawable-large-mdpi或layout-xlarge中声明的资源,但似乎并非如此.
我有一个测试项目,其中包含以下每种尺寸的布局文件:
在运行Android 4.0.x的10"Motorola XOOM上,设备选择layout-720dp文件夹中的布局.如果该文件夹不存在,它会在layout-sw600dp文件夹中选择布局! 为什么不选择layout-xlarge中的布局?
更奇怪的是,我在这些文件夹中有drawable:
从上面的10"摩托罗拉XOOM,从drawable-sw600dp-mdpi中选择图像. 为什么不在drawable-xlarge-mdpi中选择drawable?
我们不应该期望xlarge量词在Android 3.2之上完全有效吗?
这是否意味着我必须将drawable-xlarge-mdpi文件夹中的所有资产复制到drawable-sw720dp-mdpi文件夹中?(支持Android 3.0,3.1和3.2+?)
希望我在这里错过了一些简单的东西.请指教.
我想在视频播放器中点击"全屏"按钮时模仿YouTube Android应用的行为:
似乎如果我使用以下方法强制旋转横向或纵向:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Run Code Online (Sandbox Code Playgroud)
要么
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Run Code Online (Sandbox Code Playgroud)
...我立即失去了检测传感器方向变化的能力(即一旦用户处于风景中,他们想要手动将设备旋转回肖像).
如果我在onConfigurationChanged中将请求的方向更改为未指定的方向或传感器,则方向会暂时翻转为横向/纵向(无论我从上方请求),然后快速回到与设备保持方式相匹配的方向.
关于如何实现上述目标的任何想法?
我有一个带有ViewPager的FragmentActivity - 这个ViewPager包含三个ListView - 每个ListView都有自己独特的适配器(和唯一的数据集).
我想使用AsyncTaskLoader来填充这些适配器,但仅限于在ViewPager中选择给定视图时.
是否需要在activity的onCreate方法中初始化一个加载器?(下面的代码)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_foo);
getSupportLoaderManager().initLoader(0, null, this);
getSupportLoaderManager().initLoader(1, null, this);
getSupportLoaderManager().initLoader(2, null, this);
}
Run Code Online (Sandbox Code Playgroud)
或者可以交互式地调用initLoader(...),例如OnPageChangeListener.onPageSelected的监听器的结果?
mPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int newPage) {
getSupportLoaderManager().initLoader(newPage, null, this);
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果用户可能只查看寻呼机中的第一个视图,我想避免必须预先执行3个耗时的加载器.
编辑: 或者让ViewPager为每个视图使用Fragment是一个更好的设计,每个片段都负责管理自己的加载器?
我的活动有一个异步准备视频的VideoView:
Uri mUri = "uri to streaming video"
VideoView mVideoView = (VideoView) rootView.findViewById(R.id.videoView);
mVideoView.setOnErrorListener(this);
mVideoView.setOnCompletionListener(this);
mVideoView.setVideoURI(mUri);
mVideoView.setMediaController(null);
mVideoView.setOnPreparedListener(this);
Run Code Online (Sandbox Code Playgroud)
当它正在"准备"时,我会显示一个ProgressDialog ...如果我在此状态下按下后退按钮,则会向ADB打印以下错误,并且活动会在黑屏上等待一小段时间静默崩溃:
E/MediaPlayer( 2204): stop called in state 4
E/MediaPlayer( 2204): error (-38, 0)
W/ActivityManager( 59): Activity pause timeout for HistoryRecord{45080368 com.myapp.VideoPlayerActivity}
Run Code Online (Sandbox Code Playgroud)
阻止VideoView准备视频以便退出活动的最佳方法是什么?
注意:在调用正在准备的视频的回调之前,我无权访问实际的MediaPlayer对象:
@Override
public void onPrepared(MediaPlayer player)
Run Code Online (Sandbox Code Playgroud)
...当MediaPlayer/VideoView正在"准备"时没有发生.
我想为drawable-xlarge-mdpi和drawable-sw600dp-mdpi提供相同的图像资源/ drawable.
似乎我能做到这一点的唯一方法是在res /下创建两个文件夹,并将同一组资源复制到每个文件夹中.
使用布局,我们可以进行别名.即在values文件夹中使用特定限定符创建名为layout.xml的文件,并添加项以指向两个限定符的单个布局文件:
这两个文件的内容如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="activity_shows" type="layout">@layout/activity_shows_tablet</item>
</resources>
Run Code Online (Sandbox Code Playgroud)
(匹配xlarge的设备或匹配sw600dp的设备现在将使用activity_shows_tablet.xml作为"activity_shows"的布局文件)
drawables有类似的方法吗?
我正在使用DraggablePanel库(https://github.com/pedrovgs/DraggablePanel)来促进类似YouTube的视频播放器.如果您不熟悉此功能,它基本上允许用户将当前正在播放的视频缩小为停靠在屏幕一角的小缩略图.
不幸的是(我不太确定这是上述库的问题)我注意到如果我在VideoView的父视图上应用X和Y比例,VideoView本身将不会调整其内容的大小以匹配.
请参见下面的屏幕截图,其中VideoView处于自然规模,然后将其父视图缩小到约0.6:0.6.您应该注意到,在缩放的屏幕截图中,VideoView已裁剪其内容而不是调整大小以适应.


所以当我的父级比例发生变化时,我试图在VideoView上强制宽度和高度.互联网上有一些关于覆盖VideoView尺寸的例子 - 但这是我的简单版本:
public class ScalableVideoView extends VideoView {
private int mVideoWidth;
private int mVideoHeight;
public ScalableVideoView(Context context) {
super(context);
}
public ScalableVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScalableVideoView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mVideoWidth = 0;
mVideoHeight = 0;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (mVideoWidth > 0 && mVideoHeight > 0) {
// If a custom dimension is specified, force it as …Run Code Online (Sandbox Code Playgroud) 因此,Android SDK中的[DateUtils.getRelativeTimeSpanString()] [1]非常适合显示过去的相对时间.
即:5天前,或5分钟前.
但对于将来的日期似乎并不那么好.它似乎只是打印日期.
是否有任何简单的替代方法可以为将来的日期生成相对时间跨度字符串(没有通过比较两个日历对象来写出能够计算天,小时,分钟,秒的内容)?
长达5天或5分钟的路线?
这基本上是我必须做的,它看起来有点脏(注意:这段代码只是为帖子编写而不是实际上通过java编译器运行):
Calendar calendarIO = Calendar.getInstance();
calendarIO.set(2013, 2, 14, 7, 0);
long milliseconds1 = calendarIO.getTimeInMillis();
long milliseconds2 = System.currentTimeMillis();
long diff = milliseconds1 - milliseconds2;
long diffSeconds = diff / 1000;
long diffMinutes = diff / (60 * 1000);
long diffHours = diff / (60 * 60 * 1000);
long diffDays = diff / (24 * 60 * 60 * 1000);
String relativeTime = "";
if (diffDays > 1) {
relativeTime = diffDays + …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个通知,该通知将显示在通知栏的"正在进行"区域(如WeatherBug).
这是我正在使用的代码:
PendingIntent intent = PendingIntent.getActivity(lastContext, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT | Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR)
Run Code Online (Sandbox Code Playgroud)
根据我的理解,FLAG_NO_CLEAR也应该通过按下清除按钮来防止通知被清除,这也是行不通的
任何提示SO?
我正在将一个VS2010项目移植到VS2005(不要问为什么......).在VS2010中,以下工作正常:
#include <regex>
Run Code Online (Sandbox Code Playgroud)
但在VS2005中它是一个致命的错误:
fatal error C1083: Cannot open include file: 'regex': No such file or directory
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑:我应该补充一点,我是一个C++/VS新手.如果不是VS2005的一部分,我也欢迎有关使用什么作为正则表达式库的建议.
谢谢!
我有一个私人领域的班级:
std::set<std::string> _channelNames;
Run Code Online (Sandbox Code Playgroud)
..和一个可选的setter函数:
void setChannelNames(std::set channelNames);
Run Code Online (Sandbox Code Playgroud)
在setter函数中,如何将private _channelNames字段替换为setter函数传递的字段?
我试过了:
void Parser::setChannelNames(std::set channelNames) {
this->_channelNames = channelNames;
}
Run Code Online (Sandbox Code Playgroud)
但这在VS2005中产生了一个错误:
Error 2 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::set' (or there is no acceptable conversion) parser.cpp 61
Run Code Online (Sandbox Code Playgroud)
我绝对是一个C++新手,并期望我应该在这里做一些指针工作.
任何快速提示?
谢谢!
我试图从一个Android应用程序开始,在此之前我需要做以下事情:我有一个从View类扩展的类和实现View.onTouchListener接口.现在,我在onDraw()方法中绘制了一个圆圈,以便圆圈出现在应用程序的开头.现在,当用户触摸(实际点击)圆圈时,我想做点什么.所以,我在这里要做的第一件事就是在圆圈的触摸上显示一个toast msg.我尝试使用以下代码但没有任何反应.请帮我找到解决方案.
这是View类:
package com.exam.trial;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
public class pad extends View implements View.OnTouchListener{
Paint paint;
public pad(Context context) {
super(context);
// TODO Auto-generated constructor stub
paint = new Paint();
}
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN: {
if (event.getX()>70 && event.getX()<130 && event.getY()>70 && event.getY()<130)
{
Toast toast = Toast.makeText(getContext(), "Works fine", Toast.LENGTH_SHORT);
toast.show();
}
return true;
}
}
return false;
}
@Override …Run Code Online (Sandbox Code Playgroud) 我正在创建一个Android小部件.我的小部件有一个视图,当点击时打开一个Activity看起来像Dialog.
我已更新AndroidManifest.xml为此活动设置样式,如对话框.
<activity
android:name=".Widget.Widget_OeffneDialog"
android:theme="@android:style/Theme.Dialog">
</activity>
Run Code Online (Sandbox Code Playgroud)
这太棒了.
现在我从这个Widget打开应用程序并单击主页按钮(应用程序现在在后台),然后单击对话框显示的wdget - 但应用程序的其余部分显示在对话框后面.
像这儿:

我不想在对话框活动下面看到之前的活动 - 我该怎么做?