我想在Android上布局我的所有屏幕,以便它们与任何屏幕尺寸和分辨率兼容.所以我认为最好的方法是使用weight属性来使用某种相对规范.
我知道如何指定按钮的宽度相对于其父项,但我不知道如何将其应用于布局的所有方面.它背后的逻辑理想情况如下:
horizontalSize = 100%
verticalSize = 100%
Button1:
20% padding to top <- no idea, how to do this, (only using fixed sizes in relative layout)
10% height <- no idea, how to do this
50% width <- with weight attribute
center horizontally <- with layout_centerHorizontal
Button2:
20% padding to Button1 <- only know relative with use of fixed pixels
5% padding to left
30% width
10% height
Button3:
20% padding to Button1
5% padding to right …Run Code Online (Sandbox Code Playgroud) 我有一个带android:inputType="phone"键盘的EditText ."OK"这个键盘上有一个.我喜欢抓住这个OK btn.但是我不知道关键事件.我想使用这样的代码:
setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
case KeyEvent.?????????? <- this one please
return true;
default:
break;
}
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
我希望代码与按"圆箭"不同!
我检查了文档中的所有关键事件但找不到任何内容.谢谢
我经常使用如下定义的常量:
private static final int myConstant_x = 1;
private static final int myConstant_y = 2;
private int anyVariable;
anyVariable = myConstant_x
Run Code Online (Sandbox Code Playgroud)
在调试过程中,以某种方式访问日志输出的变量名称而不是值确实很有帮助。
Log.i (TAG,"this is debug output of anyVariable with constant name: " + ????);
Run Code Online (Sandbox Code Playgroud)
输出: “这是常量名称为 myConstant_x 的任何变量的调试输出”
代替
Log.i (TAG,"this is debug output of anyVariable with constant name: " + anyVariable);
Run Code Online (Sandbox Code Playgroud)
输出: “这是常量名称为 1 的任何变量的调试输出”
有什么办法吗?
我知道可以从代码中获取方法名称,但是有没有一种方法也可以以某种方式获取变量名称?
真的很有帮助
谢谢
编辑:更新/更正示例代码 - 对于第一个误导版本感到抱歉
我做了很多xCode编程,发现类中方法的概述视角真的很有帮助.它看起来像这样:
MY_GROUP_1 <- defined with #pragma mark MY_GROUP_1
M method11
M method12
M....
MY_GROUP_2
M method21
M method22
M....
Run Code Online (Sandbox Code Playgroud)
在Eclipse中我只找到了大纲视图,它没有带标题的分组.所以我开始定义方法只是为了将它们滥用为像这样的组名
/**
*
* @category MessageSequence
*/
public void __GROUP_1__() {
}
Run Code Online (Sandbox Code Playgroud)
至少我现在在大纲视图中有一个如下所示的列表:
__GROUP_1__
method11
method12
method..
__GROUP_2__
method21
method22
method..
Run Code Online (Sandbox Code Playgroud)
虽然它总比没有好,但我怀疑这是通过其方法来概述类结构的最佳方法.
这样做的正确方法是什么?
非常感谢!
ps我也不知道为什么分组标题方法必须公开.Eclipse不在概述视图中显示私有方法.
编辑:根据"美甲"给出的答案我在这里更新,以便每个人都可以看到它是如何工作的,而不必浪费时间去尝试...
现在你可以这样做:
//region Y
public void y1() {
}
public void y2() {
}
//endregion Y
Run Code Online (Sandbox Code Playgroud)
没有设置折叠对我来说不起作用..哦,是的,不要忘记重新启动Eclipse,如果它不能立即工作!
我正在使用BackgroundWorker 来执行繁重的任务,这样UI 线程就不会被阻塞。虽然BackgroundWorker 可以使用进度方案将值发送到UI 线程,但是BackgroundWorker 如何从UI 线程获取一些值呢?
是通过询问还是简单地通过 UI 线程向 BackgroundWorker 发送一些值?
仅在BackgroundWorker中访问像UIForm.x这样的UI线程的变量是行不通的,它似乎无法访问UI变量???
非常感谢
我使用以下代码从Android应用程序中启动一个调用:
intent.setData(Uri.parse("tel:+12345 #123"));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
当它启动呼叫时,它会忽略以#开头的所有内容.
我读了一些关于修改SpecialCharSequenceMgr.java文件的内容,但我无法在任何地方找到它,老实说,不知道究竟要做什么.解决这个问题的最佳方法是什么?
我想使用该ViewPager功能并下载支持包:修订版4(2011年10月).
这需要API 10,但我想为尽可能低的API开发我的应用程序 - 理想情况下是7左右.
如何找出使用ViewPager所需的最低API以及我需要下载并包含在我的应用程序中的库?
非常感谢!
我不明白为什么我得到一个编译错误:
public class Main_screen extends ListActivity {
List<Object> completeList;
private My_ArrayAdapter adapter;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
completeList = getCompleteList();
adapter = new My_ArrayAdapter(this, completeList);
setListAdapter(adapter);
}
public void doSth() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
在My_ArryAdapter中:
public class My_ArrayAdapter extends ArrayAdapter<Object> {
private final List<Object> list;
private final Activity context;
public My_ArrayAdapter(Activity context, List<Object> list) {
this.context = context;
this.list = list;
}
public void tryIt() {
context.doSth(); // <-------- THIS DOES NOT WORK, this method can not be called …Run Code Online (Sandbox Code Playgroud) 我试图让bulkTransfer在USB主机模式下工作,但参考文档并没有真正解释它.
打电话的时候
bufferTmpLen = mDeviceConnection.bulkTransfer(mEPIN,
bufferTmp, 4096, TIMEOUT_MS);
Run Code Online (Sandbox Code Playgroud)
我真的很困惑,这种方法的重要信息在任何地方都没有描述.
如果有比标准参考更好的来源,请告诉我.
多谢!
我使用调度程序来确保我的循环不会花费太长时间,因此如果调度程序触发并结束循环,我将退出循环.
这非常直截了当:
public void startSchedulerForTimeout() {
Log.i("x", "SCHEDULING TIMEOUT " );
timeoutForLoopReached = false;
scheduler.schedule(new Runnable() {
public void run() {
timeoutForLoopReached = true;
Log.i("x", "SET TIMEOUT FLAG ");
}
}, 10, TimeUnit.SECONDS);
}
Run Code Online (Sandbox Code Playgroud)
所以在我的代码中我只写:
startSchedulerForUSBMessageTimeout();
while (!done && !timeoutForLoopReached) {
...do the loop stuff
}
Run Code Online (Sandbox Code Playgroud)
为了确保在我再次运行循环时不会触发计划任务,我需要取消计划过时的任务(如果我在超时之前结束循环),以便新计时器将在新循环开始时再次启动(而不是在循环执行的第二次之间完成第一个循环后触发的旧的一个)
如何才能取消计划未被触发的任何计划任务以避免此计划任务混淆?
非常感谢!
我尝试了一切我可能找到的对齐这个EditText元素 - 但它不会.
我在这里错过了什么?正如你所看到的那样,我试过了两次 android:layout_alignParentRight = "true",android:layout_gravity="right"没有运气.
PS.linearLayout只是父亲中具有RelativeLayout的一个元素,但我想这并不重要.
<LinearLayout android:id="@+id/block1"
android:layout_width="fill_parent"
android:paddingLeft = "4sp"
android:padding = "4sp"
android:layout_height="25sp"
android:layout_marginTop = "4sp"
android:layout_below="@+id/Settings_phoneNumbersLbl"
android:orientation="horizontal">
<TextView android:id="@+id/Settings_phoneNumbersT1"
android:textColor="#000000"
android:textSize="14sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Settings_phoneNumbersT1"
/>
<EditText android:id="@+id/myRightAlignedText"
android:layout_width="170sp"
android:layout_height="wrap_content"
android:background="@android:drawable/editbox_background"
android:layout_alignParentRight = "true"
android:layout_gravity="right"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) 当主用户线程调用另一个这样的线程中的一系列方法时,我有点困惑
在主线程中:
otherThread.callMethod();
otherThread.callMethod();
otherThread.callMethod();
otherThread.callMethod();
otherThread.callMethod();
otherThread.callMethod();
otherThread.callMethod();
Run Code Online (Sandbox Code Playgroud)
而callMethod在另一个线程是从这样的套接字写入和读取:
mmOutStream.write(buffer);
mmOutStream.flush();
while (!finished) {
if (mmInStream.available() > 0)
if ((char) (c = (byte) mmInStream.read()) != 'x') {
responseBuffer[responseBufferLen++] = c;
} else {
finished = true;
}
}
Run Code Online (Sandbox Code Playgroud)
这显然是一种阻塞方案 - 但是在按顺序调用这些方法时,不会阻止主用户线程.
我的意思是阻止所有按钮仍然反应,用户可以毫不拖延地与屏幕交互.怎么可能?