我有一个包含两个ImageView的布局.我希望其中一个在纵向中可见,另一个在横向中可见.如何使用资源实现它?(我知道如何以编程方式设置它,但我需要使用资源来实现它的特定用途).
我试过类似的东西
在res/layout/may_layout.xml中:
...
<ImageView
android:id="@+id/image1"
android:visibility="@integer/visible_in_portrait" <<-- is this allowed?
...
/>
<ImageView
android:id="@+id/image2"
android:visibility="@integer/visible_in_landscape"
...
/>
Run Code Online (Sandbox Code Playgroud)
在res/values/integers.xml中:
...
<!-- NOTE: 0 and 8 are VISIBLE and GONE respectively -->
<integer name="visibile_in_portrait">0</integer>
<integer name="visibile_in_landscape">8</integer>
Run Code Online (Sandbox Code Playgroud)
在res/values-land/integers.xml中:
...
<integer name="visibile_in_portrait">8</integer>
<integer name="visibile_in_landscape">0</integer>
Run Code Online (Sandbox Code Playgroud)
但是当我试图给图像充气时,我得到一个运行时错误(索引超出范围).当我删除android:visibility语句时,程序运行但我看到两个图像.
问:将资源用作android:visibility属性的值的方法是什么?
(如果你想知道为什么以编程方式设置它将无法帮助我,它与使用文件uri位图的app小部件的自动landspace/portrait切换有关).
我的应用程序有这个主要活动:
<activity
android:name=".main.MainActivity"
...
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
它从家庭发射器发射没有任何问题.但是,当我尝试从Google的手势搜索启动它时,我收到一条错误消息,指出应用程序没有.MainActivity
.
https://play.google.com/store/apps/details?id=com.google.android.apps.gesturesearch
Android应用程序是否需要调用主要活动.MainActivity
?如果不是,它是一个软推荐或约定,还是仅仅是对Gesture的错误假设?
我试图通过设置TextView.setLineSpacing()的否定'添加'来减少TextView中的行间距.除了底线被截断之外,它运行良好.
主要布局
<TextView
android:id="@+id/text_view"
android:padding="dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
tools:context=".MainActivity" />
Run Code Online (Sandbox Code Playgroud)
主要活动:(注意
package com.font_test;
import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/custom_fonts.ttf");
final TextView tv = (TextView) findViewById(R.id.text_view);
tv.setTypeface(typeface);
tv.setTextSize(60);
tv.setLineSpacing(-30f, 1f); // *** -30 to reduce line spacing
tv.setBackgroundColor(0x280000ff);
tv.setText("gggkiiikkk" + "\n" + "gikgikgik" + "\n" + "kigkigkig");
}
}
Run Code Online (Sandbox Code Playgroud)
这导致在视图底部截断(注意底线的'g'):
似乎问题与错误的布局测量有关.如果我将TextView设置为
android:layout_height="fill_parent"
Run Code Online (Sandbox Code Playgroud)
它确实正确呈现:
知道怎么解决吗?如果它有帮助,我不介意有丑陋的变通方法.我也可以访问FontForge,如果需要我可以修改字体文件.
编辑:此代码实际有效。我在使用它的代码中遇到了问题。无论如何都要保留它,以防任何人发现它有用。
我有一个带有两种方法的类,用于编写和读取布尔持久性首选项。但是,如果我写一个新值然后尝试读取它,我仍然会得到旧值。仅当我终止该应用程序并重新启动它时,我才获得新的价值。知道是什么问题吗?
Context mContext;
....
public void writeFlag(boolean flag) {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(mContext);
Editor editor = sharedPreferences.edit();
editor.putBoolean("mykey", flag);
editor.commit();
}
public boolean readFlag() {
SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(mContext);
return sharedPreferences.getBoolean("mykey", false);
}
Run Code Online (Sandbox Code Playgroud) 我的应用有此代码段
mView.setDrawingCacheEnabled(true);
mBitmap = Bitmap.createBitmap(mView.getDrawingCache());
Run Code Online (Sandbox Code Playgroud)
其中mView是FrameLayout的自定义子类的实例.该应用程序已成功运行了6个月,拥有数千名用户.最近我收到了一些关于传递给createBitmap()的空指针的报告(可能来自同一个用户但我无法确认).我不知道用户使用的硬件或Android版本.
什么可以导致getDrawingCache()返回null,即使我在它之前启用了缓存?它与新手机的硬件加速有关吗?是因为位图的ram不足吗?还要别的吗?可以预防吗?
编辑:我在这里找到了这个解决方案http://tinyurl.com/7yranvj.这是一个合理的解决方法吗?
mBitmap = Bitmap.createBitmap(mView.getWidth(), mView.getHeight(),
Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(mBitMap);
mView.draw(canvas);
Run Code Online (Sandbox Code Playgroud) 我有一个ListView
使用的子类BaseAdapter
.适配器使用项目索引(位置)作为id,因此id不稳定(基础数据上的一个操作在两个数据项之间交换).
我需要在我的适配器覆盖hasStableIds()
到return false
?
看着BaseAdapter
这里的建议
false是默认值
.
http://www.netmite.com/android/mydroid/frameworks/base/core/java/android/widget/BaseAdapter.java
// Is this required? Isn't this the default?
@Override
public final boolean hasStableIds() {
return false;
}
@Override
public final long getItemId(int position) {
return position;
}
Run Code Online (Sandbox Code Playgroud) 我有一个不使用选项菜单的主要活动.我需要实现此行为:1.按下Android菜单按钮时,会显示一个弹出窗口2.再次按下Android菜单按钮时,弹出窗口将被取消.
我知道如何通过覆盖主活动中的onKeyDown()来做#1,但不知道如何做#2.显示弹出窗口时,不再触发主活动的onKeyDown().
当主要活动打开弹出窗口时,如何捕获Android菜单按钮?(在我的例子中,弹出窗口是一个带有膨胀视图的PopupWindow).
顺便说一句,我试图在弹出窗口的主视图上设置一个关键监听器,但它没有被触发
mTopView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
LogUtil.debug("*** Key: %d", keyCode);
return false;
}
});
Run Code Online (Sandbox Code Playgroud) 我有一个本地化为多种语言的程序.它适用于Android 4.x,但有一个字体渲染问题Android 2.3.x. 这是一个重现它的小例子.任何帮助将不胜感激.
主要活动布局.这里没什么特别的.只有两个TextView视图:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/text_view1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
tools:context=".MainActivity" />
<TextView
android:id="@+id/text_view2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
tools:context=".MainActivity" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
主要活动:
package com.font_test;
import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
private static final String TEXT =
"\u0440\u0443\u0441\u0441\u043A\u0438\u0439" +
"\n" +
"pyccknn";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Set textview 1
final Typeface typeface1 = Typeface
.createFromAsset(getAssets(), "fonts/chelsea.ttf");
final TextView tv1 = (TextView) …
Run Code Online (Sandbox Code Playgroud) 我应该在widget provider xml minwidth/height中放入哪些数字来实现1,2,3和4行和列?
从查看其他应用程序,我发现人们正在使用72,142,220和294 dips,但在Google小部件指南中找不到任何参考.
这些号码对所有设备都安全吗?它们是否基于Google规范?
编辑:更正为294(是290).
这是针对Android应用程序的。假设我有两种Alpha颜色
int color1 = 0x12345678 // aarrggbb
int color2 = 0x87654321
Run Code Online (Sandbox Code Playgroud)
如何在带有color1的图层上计算带有color2的图层的组合颜色?
我在这里找到了讨论和公式,但是在编写我自己的代码之前,先在这里检查它是否已经在Android和/或Java中可用。
http://zh.wikipedia.org/wiki/Alpha_compositing#Analytical_derivation_of_the_over_operator
编辑:请注意,问题的目标不是以位图结尾,而是以颜色结尾(例如aarrggbb int)。
android ×10
android-view ×3
fonts ×2
textview ×2
android-menu ×1
graphics ×1
java ×1
preferences ×1
truetype ×1
typeface ×1