我为波斯语字符串编写了一个自定义TextView,这个TextView应该将英文数字替换成波斯数字
public class PersianTextView extends TextView {
public PersianTextView(Context context) {
super(context);
}
public PersianTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PersianTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setText(CharSequence text, BufferType type) {
String t = text.toString();
t = t.replaceAll("0", "?");
t = t.replaceAll("1", "?");
t = t.replaceAll("2", "?");
t = t.replaceAll("3", "?");
t = t.replaceAll("4", "?");
t = t.replaceAll("5", "?");
t = t.replaceAll("6", "?");
t = t.replaceAll("7", "?");
t = …Run Code Online (Sandbox Code Playgroud) 我有一个列表适配器,我正在使用holder.text.setTypeface(TYPEFACE)设置类型面,我有一个名称,我使用分配每个ListView按钮的文本.但我想知道如何只设置一个单独的列表项自定义字体.基本上我说我有3个ListAdapter按钮,按钮1,按钮2和按钮3.我希望按钮2是自定义字体,而按钮1和按钮3保持正常.如何才能做到这一点?
我有这个字符串 8S8Q4D1SKCQC2C4S6H4C6DJS2S1C6C
如何将此字符串拆分为每个子字符串包含2个字符的子字符串?我很困惑,因为我找不到拆分它们的分隔符.
出于某种原因,我所有的精灵都开始出现在黑盒子之前.这是我的代码.我只使用前2个精灵运行良好,但当我添加其他精灵时,他们在我的Android设备上变成了黑盒子.任何帮助将不胜感激.
public class GameHabeebActivity extends SimpleBaseGameActivity implements IAccelerationListener, IOnSceneTouchListener, IOnAreaTouchListener {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private BitmapTextureAtlas mBitmapTextureAtlas;
private TextureRegion mBoxFaceTextureRegion;
private TextureRegion mCircleFaceTextureRegion;
private TextureRegion mBaseballTextureRegion;
private TextureRegion mTomatoeTextureRegion;
private TextureRegion mBatTextureRegion;
private TextureRegion mCanTextureRegion;
private TextureRegion mBottleTextureRegion;
private int mFaceCount = 0;
private PhysicsWorld mPhysicsWorld;
private float mGravityX;
private float mGravityY;
private int CAMERA_WIDTH;
private int CAMERA_HEIGHT;
private Scene mScene;
private int itemscale=2;
private int whichface=0;
// ===========================================================
// Constructors …Run Code Online (Sandbox Code Playgroud) 我正在编写一个Android应用程序,在其中,我有一个VirtualDisplay镜像屏幕上的内容,然后我将帧从屏幕发送到一个实例MediaCodec.它有效,但是,我想添加一种指定编码视频的FPS的方法,但我不确定如何这样做.
根据我的阅读和实验,丢弃编码的帧(基于演示时间)不能很好地工作,因为它最终会产生块状/伪影的视频,而不是低帧率的平滑视频.其他阅读表明,做我想要的唯一方法(限制FPS)将限制传入的FPS到MediaCodec,但是VirtualDisplay刚收到一个Surface由MediaCodec下面构造的
mSurface = <instance of MediaCodec>.createInputSurface();
mVirtualDisplay = mMediaProjection.createVirtualDisplay(
"MyDisplay",
screenWidth,
screenHeight,
screenDensity,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
mSurface,
null,
null);
Run Code Online (Sandbox Code Playgroud)
我也试过子类Surface和限制被馈送到帧MediaCodec通过unlockCanvasAndPost(Canvas canvas),但该功能似乎从来没有对我的情况下被调用,因此,有可能是我如何延长一些古怪Surface以及与互动Parcel的writeToParcel功能被称为上我的实例,但这是在我的实例中调用的唯一函数(我可以告诉).
其他阅读建议我可以从编码器 - >解码器 - >编码器,并限制第二个编码器馈送帧的速率,但这是很多额外的计算,如果我可以避免它,我宁愿不做.
有没有人成功限制VirtualDisplay饲喂它的速度Surface?任何帮助将不胜感激!
我试图使用SharedPreferences接口的自定义实现将应用程序的首选项持久保存到数据库(而不是默认的XML).
为什么?我想使用PreferenceActivity构建UI 的便利性,但是这个应用程序将在多个设备上使用,因此用户设置的首选项需要在设备之间保留.
所以..我已经编写了实现,但无法弄清楚如何将特定的SharedPreference与a相关联PreferenceActivity.我知道使用getSharedPreferences(),但我怎么能覆盖呢?我能SharedPreferences以某种方式注册我吗?我没有在API中看到任何内容来执行此操作.
或者......如果我发现这一切都错了,请告诉我.谢谢.
我正在编写一个Android应用程序sqlite.有许多活动和一项服务.我使用来自多个线程的数据库.它完美地Android 2.X运行,但是一旦我在它中运行Android 3.X它总是抛出这个错误,并且Force Close:
05-04 22:17:04.815: I/SqliteDatabaseCpp(8774): sqlite returned: error code = 5, msg = database is locked, db=/data/data/xxx/databases/im
05-04 22:17:04.815: E/SqliteDatabaseCpp(8774): sqlite3_open_v2("/data/data/xxx/databases/im", &handle, 6, NULL) failed
05-04 22:17:04.835: E/SQLiteDatabase(8774): Failed to open the database. closing it.
05-04 22:17:04.835: E/SQLiteDatabase(8774): android.database.sqlite.SQLiteDatabaseLockedException: database is locked
05-04 22:17:04.835: E/SQLiteDatabase(8774): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
05-04 22:17:04.835: E/SQLiteDatabase(8774): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:983)
05-04 22:17:04.835: E/SQLiteDatabase(8774): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956)
05-04 22:17:04.835: E/SQLiteDatabase(8774): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1021)
05-04 22:17:04.835: E/SQLiteDatabase(8774): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:790)
05-04 22:17:04.835: …Run Code Online (Sandbox Code Playgroud) ContentValues和之间有什么区别HashMap?如果存在差异,描述它的最佳比喻是什么?
我一直在阅读有关Android引入的新架构组件的信息,但我无法弄清楚其工作原理:
ViewModelProviders.of(Activity).get(Class)
Run Code Online (Sandbox Code Playgroud)
最初,我认为它调用默认构造函数并返回一个ViewModel对象,然后使用该对象实例化。一个init()方法
public class UserProfileViewModel extends ViewModel {
private String userId;
private User user;
public void init(String userId) {
this.userId = userId;
}
public User getUser() {
return user;
}
}
Run Code Online (Sandbox Code Playgroud)
摘录自指南:https : //developer.android.com/topic/libraries/architecture/guide.html
但是,在指南的后面有以下代码段:
public class UserProfileViewModel extends ViewModel {
private LiveData<User> user;
private UserRepository userRepo;
@Inject // UserRepository parameter is provided by Dagger 2
public UserProfileViewModel(UserRepository userRepo) {
this.userRepo = userRepo;
}
public void init(String userId) {
if (this.user != null) {
// ViewModel is created …Run Code Online (Sandbox Code Playgroud) 目前,我用mLifecycleOwner = mContext as LifecycleOwnerget LifecycleOwner,它可以工作,但我认为它不是一个好的代码。
我怎样才能LifecycleOwner从ListAdapter?
class VoiceAdapters (private val aHomeViewModel: HomeViewModel, private val mPlay: PlayInterface):
ListAdapter<MVoice, VoiceAdapters.VoiceViewHolder>(MVoiceDiffCallback()) {
private lateinit var mContext: Context
private lateinit var mLifecycleOwner:LifecycleOwner
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VoiceViewHolder {
mContext = parent.context
mLifecycleOwner = mContext as LifecycleOwner
return VoiceViewHolder(
LayoutVoiceItemBinding.inflate(LayoutInflater.from(parent.context), parent, false).also {
it.lifecycleOwner = mLifecycleOwner
it.aHomeViewModel = aHomeViewModel
}
)
}
...
}
Run Code Online (Sandbox Code Playgroud)