通过使用这个
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_SAME, AudioManager.FLAG_SHOW_UI);
Run Code Online (Sandbox Code Playgroud)
我可以显示在屏幕上显示音量控制的小系统弹出窗口。不幸的是,此命令仅显示一个带有我指示的单个流的滑块,而不是所有其他滑块。实际上,此命令弹出的对话框与按下音量物理按钮时弹出的对话框相同。弹出窗口仅存活 2 秒。也可以使用 adjustVolume() 触发对话框并让系统决定哪个是相关的流,但仍然只显示一个并且只有 2 秒。
在这 2 秒内,用户可以单击“v”按钮并放大对话框,以便在稍长的时间内更改所有流。
如何以编程方式触发第二个对话框,显示所有可用的音量滑块,并使其保持更长时间的活动状态(或让用户使用后退键关闭它)?
我以编程方式创建了一个要在Dialog中使用的图像的GridView.如果我将列设置为自动调整,我总是会得到两列,无论图像的大小和屏幕大小如何.如果我将列强制为固定数字,那么它可以正常工作,但我无法避免图像在某些屏幕尺寸上重叠,因此自动管理列数会更好.更重要的是,当我尝试设置拉伸时,它根本没有显示任何东西!
我的ImageAdapter:
public class ImageAdapter extends BaseAdapter {
private Context mContext;
// Constructor
public ImageAdapter(Context c){
mContext = c;
}
public int getCount() {
return (IconC.Res.length);
}
public Object getItem(int position) {
return (IconC.Res[position]);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setLayoutParams(new GridView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(IconC.Res[position]);
return (imageView);
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个已经在市场上的应用程序,我们称之为"旧应用程序".我想创建一个"新应用程序",与旧的应用程序共享数据,我决定使用SharedID.
我更改了新应用的清单,添加了以下行:
android:sharedUserId="com.myname.myoldapp"
Run Code Online (Sandbox Code Playgroud)
其中com.myname.myoldapp是旧应用程序包的名称.但它不起作用.
如何使用新应用访问旧的应用数据?更改旧应用程序的userId以匹配新应用程序的共享用户ID,显然不是一个选项,因为旧应用程序已经在线,所有更新它的用户都将丢失其个人数据.
PS:证书是一样的.
谢谢,.
在这三个来源之间,效率方面是否存在差异?
for (int i=0; i<N; i++)
int j = whatever();
Run Code Online (Sandbox Code Playgroud)
和
int j;
for (int i=0; i<N; i++)
j = whatever();
Run Code Online (Sandbox Code Playgroud)
和
int i, j;
for (i=0; i<N; i++)
j = whatever();
Run Code Online (Sandbox Code Playgroud)
谢谢.
PS:显然我的问题不是参考变量的范围而是仅仅考虑循环的效率,特别是前两种情况,其中变量j被声明为1次而非N次.
最近我碰巧写了一段与此类似的代码:
switch (x) {
case a: case b: case c:
// do something
break;
case d: case e: case f:
// do something
break;
}
Run Code Online (Sandbox Code Playgroud)
然后,我错了,并写了一个类似的代码与语法错误:我忘了写case关键字:
switch (x) {
case a: b: c:
// do something
break;
case d: e: f:
// do something
break;
}
Run Code Online (Sandbox Code Playgroud)
此语法实际上在某些其他语言中有效,并且交换机会传递所有值.
实际上这里也是有效的,因为我没有得到任何语法错误:但是顺利执行切换的程序的错误行为,只缺少没有case关键字的值.
为什么?什么是b; c:,e:和f:意味着第二次剪辑?
它们可能是标签吗?然后,他们怎么可能在同一条线上呢?我错过了什么,我不理解这个奇怪的非错误背后?
编辑:它们似乎确实是标签.这是不寻常的,正如@Bathsheba所解释的那样,问题在于标签通常是在一行的开头.奇怪的是Java如何在我的脑海中使用这种令人困惑的语法,甚至没有显示警告.这可能会在长程序中造成很多混乱和奇怪的错误.
谢谢.
美好的一天.
我有一个西班牙语单词的ASCII文件.它们只包含A和Z之间的字符,加上Ñ,ASCII代码165(http://www.asciitable.com/).我用这个源代码得到这个文件:
InputStream is = ctx.getAssets().open(filenames[lang_code][w]);
InputStreamReader reader1 = new InputStreamReader(is, "UTF-8");
BufferedReader reader = new BufferedReader(reader1, 8000);
try {
while ((line = reader.readLine()) != null) {
workOn(line);
// do a lot of things with line
}
reader.close();
is.close();
} catch (IOException e) { e.printStackTrace(); }
Run Code Online (Sandbox Code Playgroud)
这里我称之为workOn()的函数应该从字符串中提取字符代码,就像这样:
private static void workOn(String s) {
byte b;
for (int w = 0; w < s.length(); w++) {
b = (byte)s.charAt(w);
// etc etc etc
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这里发生的是,当它代表Ñ字母时,我无法将b识别为ASCII码.b的值对于任何ascii字母都是正确的,并且在处理Ñ时返回-3,带来签名的是253,或ASCII字符².没什么相似的Ñ......
这里发生了什么?我该如何获得这个简单的ASCII码?
令我生气的是我无法找到正确的编码.甚至,如果我去浏览UTF-8表(http://www.utf8-chartable.de/)Ñ …
我有这个.
private ArrayList<String> words;
Run Code Online (Sandbox Code Playgroud)
这是一本字典,所以单词已经排序了.通过旧的研究,我知道二项式搜索应该非常快,我想Java已经实现了必要的.
那么,查找排序的 ArrayList中是否存在某个字符串的最有效方法是什么?或者我应该使用不同的类型?
谢谢.
我想初始化一个多维私有静态最终的int数组,索引值.
private static final int[][] a = { {0,0,0}, {1,2,3} };
Run Code Online (Sandbox Code Playgroud)
这对我不好.我在某处找到了这个奇怪的语法,但是我还是不想编译.我添加它来澄清我需要的东西:
private static final int[][] a;
private static {
a = new int[NUM_TYPES][3];
a [TYPE_EMPTY] = { 0, 0, 0 };
a [TYPE_NORMAL] = { 1, 2, 3 };
};
Run Code Online (Sandbox Code Playgroud)
不同的是,现在我应该有[TYPE_EMPTY]和[TYPE_NORMAL]而不是[0]和[1].在实际方面它是相同的,但第二个使得源更加清晰,无差错和可维护.
例如,如果我将来添加一个新的TYPE,我不需要关心数组中的数字索引.
正如我所说,我没有找到任何正确的语法来做到这一点,上面的语法是完全错误的.一些Java专家会给我一个简短的教训吗?:) 非常感谢你.
使用weight我的布局在每个屏幕尺寸和密度上都非常完美.每个视图都完美缩放.不幸的是,字符大小仍然存在很大问题:无论我使用sp还是dp定义文本大小,它仍然会根据密度而不是屏幕大小调整大小,因此在平板电脑上文字是微小的!
什么是这个问题的最佳解决方案?
非常感谢你.
在 github 上,原始存储库的所有者如何在没有拉取请求的情况下拉取其他用户在分叉中所做的更改?或者无论如何将分叉的更改包含到原始存储库中,维护有关分叉作者的信息?
我应该克隆分叉然后将其推送到原始存储库吗?或者我可以手动复制它们,但这根本不公平,因为该项目将丢失有关分叉更改作者的任何信息。
我有一个函数,作为参数获取无限数量的ImageButtons.
private void addButtons(ImageButton... ib) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
所以如果我想以这种方式调用它,这是完美的:
addButtons(button1, button2, button3);
Run Code Online (Sandbox Code Playgroud)
但现在我发现我必须使用未知数量的对象作为参数,例如数组.在addButtons里面,ImageButton参数被用作数组,所以我尝试了这个:
ArrayList<ImageButton> ibs = new ArrayList<ImageButton>();
// feed the ibs ArrayList
addButtons((ImageButton[])ibs.toArray());
Run Code Online (Sandbox Code Playgroud)
我得到了一个ClassCastException.
为什么?