不同Android产品的所有不同分辨率都让我疯狂.
我编写的第一个Android应用程序是为了支持三种常用分辨率而设计的:240x320(LDPI),320x480(MDPI)和480x800(HDPI).480x854对布局没有任何伤害,因为它具有与480x800相同的宽度.
我还购买了以下设备来测试我的Android应用程序:三星Galaxy Europe(LDPI)HTC Desire Z(HDPI)
幸运的是我的女朋友有一个HTC Wildfire S(MDPI)所以我已经涵盖了大部分决议.
但是今天,我哥哥在他的新款HTC Sensation上下载了我的应用程序,该应用程序还有另一个分辨率540x960(HDPI?).哪个没有显示我的应用程序,可能大多数平板电脑也不会正确显示它.
我用我的第一个应用程序做的是读出密度,然后设置参数:
public void set_ui_parameters() {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
if(metrics.densityDpi == DisplayMetrics.DENSITY_HIGH){
textSize = 35;
timeWidth = 80;
dayWidth = 110;
moneyWidth = 50;
} else if(metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM){
textSize = 35;
timeWidth = 53;
dayWidth = 73;
moneyWidth = 33;
} else if(metrics.densityDpi == DisplayMetrics.DENSITY_LOW){
textSize = 28;
timeWidth = 40;
dayWidth = 55;
moneyWidth = 25;
}
}
Run Code Online (Sandbox Code Playgroud)
除了参数,我还为LDPI,MDPI和HDPI创建了drawable.这适用于上述分辨率,但这取决于屏幕分辨率icw屏幕尺寸,并且例如具有540x960的HTC sensatoin失败.
我知道并非所有决议都经常使用,但我想尽可能多地支持.屏幕尺寸和密度统计
我已多次阅读 …
我想一直显示带有两位小数的EditText字段的输入.因此,当用户输入5时它将显示5.00或当用户输入7.5时它将显示7.50.
除此之外,我还希望在该字段为空而不是空时显示零.
我已经得到的输入类型设置为:
android:inputType="number|numberDecimal"/>
Run Code Online (Sandbox Code Playgroud)
我应该在这里使用输入过滤器吗?
对不起,我还是刚接触android/java ...
谢谢你的帮助!
有了nickfox的答案,我能够解决我的一半问题.
et.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.toString().matches(""))
{
et.setText("0.00");
Selection.setSelection(et.getText(), 0, 4);
}
}
});
Run Code Online (Sandbox Code Playgroud)
我还在为我的另一半问题解决问题.如果我找到了解决方案,我也会在这里发布.
OnFocusChangeListener FocusChanged = new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus){
String userInput = et.getText().toString();
int dotPos = -1; …Run Code Online (Sandbox Code Playgroud) 我有一个变量,我想用作参数的默认值:
proc log {message {output $::output}} {
....
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点或需要我评估我的proc中的变量?
我有一个面板,通过relativelayout放置在另一个视图的顶部.
我想给这个面板一个透明的背景,但是在搜索几个小时之后找不到正确的方法.当我将alpha设置回0时,我最终得到黑色背景.
希望有人可以帮助我.
非常感谢!
该面板通过以下代码绘制:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class Panel extends SurfaceView implements SurfaceHolder.Callback {
private ViewThread mThread;
Paint paint = new Paint();
public Panel(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
getHolder().addCallback(this);
mThread = new ViewThread(this);
}
public void doDraw(Canvas canvas) {
canvas.drawARGB(50, 120, 120, 120);
paint.setARGB(255, 255, 0, 0);
paint.setStrokeWidth(2);
int CanvasHeight = canvas.getHeight();
int CanvasWidth = canvas.getWidth();
canvas.drawLine(LeftStartX, LeftStartY, StopX, StopY, paint);
}
public void updateDrawing(float LB, float …Run Code Online (Sandbox Code Playgroud) 我知道这里有很多关于这个问题的问题.但他们中没有人能得到我正在寻找的答案.
我在ScrollView中有7个ET.当我启动应用程序时,没有ET有焦点,因为我在我的整体布局中添加了以下两行:
android:focusable="true"
android:focusableInTouchMode="true"
Run Code Online (Sandbox Code Playgroud)
当我点击ET时,会显示我想要的软键盘,然后我设置了值(比方说20).我按下'2'后跟'0'然后按后退按钮.此时键盘消失,但焦点仍然存在.当按下后退按钮隐藏键盘时,我也希望清除焦点.
因为当清除焦点时,ET的布局设置为我想要的.
他们都有一些代码,这是:
// Right Cable
RightCable = (EditText) findViewById (R.id.RightCable);
RightCable.setRawInputType(Configuration.KEYBOARD_12KEY);
RightCable.setOnFocusChangeListener(FocusChanged);
RightCable.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
if(RightCable.isFocused()){
LengthRightCable = Double.parseDouble(RightCable.getText().toString());
Calculate();
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.toString().matches("")) {
RightCable.setText("0.00");
Selection.setSelection(RightCable.getText(), 0, 4);
}
}
});
Run Code Online (Sandbox Code Playgroud)
我使用焦点监听器将ET的输入更改为5.00而不是0的数字.
OnFocusChangeListener FocusChanged = new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
EditText et = …Run Code Online (Sandbox Code Playgroud) android focus back-button android-softkeyboard android-edittext
今天我终于让我的facebook实现工作了,当我开始在我的应用程序中实现它时,我在@Override上遇到以下错误.
FBConnectionActivity.LoginDialogListener类型的onComplete(Bundle)方法必须覆盖超类方法
如果我删除@Override错误已解决,但我想理解为什么它在一个应用程序而不是另一个应用程序中抱怨这个.
我有以下代码.
public abstract class FBConnectionActivity extends Activity {
private class LoginDialogListener implements DialogListener {
@Override
public void onComplete(Bundle values) {
Log.d(TAG, "LoginONComplete");
String token = mFacebook.getAccessToken();
long token_expires = mFacebook.getAccessExpires();
Log.d(TAG, "AccessToken: " + token);
Log.d(TAG, "AccessExpires: " + token_expires);
sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(mContext);
sharedPrefs.edit().putLong("access_expires", token_expires)
.commit();
sharedPrefs.edit().putString("access_token", token).commit();
mAsyncRunner.request("me", new IDRequestListener());
}
@Override
public void onFacebookError(FacebookError e) {
Log.d(TAG, "FacebookError: " + e.getMessage());
}
@Override
public void onError(DialogError e) {
Log.d(TAG, "Error: " + e.getMessage());
} …Run Code Online (Sandbox Code Playgroud) 我修改了CommonsWare的prefenceActivity应用程序但遇到了问题.
我想用菜单按钮启动prefenceActivity,然后用后退按钮完成它.
我有这个通过菜单按钮启动我的prefenceActivity:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
startActivity(new Intent(this, EditPreferences.class));
return(true);
}
Run Code Online (Sandbox Code Playgroud)
它确实会回到我对应用程序的主视图,但我认为它还没有完成,因为当我再次按下菜单按钮时,prefenceActivity不会弹出agian.我必须关闭我的应用程序,它只能再次使用一次.
当我按下后退按钮时,我已经尝试在我的prefenceActivity中完成它,但这也无济于事.
我做错了什么?
谢谢你的帮助!
android ×7
back-button ×2
arguments ×1
decimal ×1
default ×1
draw ×1
drawable ×1
focus ×1
layout ×1
menu ×1
overriding ×1
proc-object ×1
tcl ×1
transparency ×1