我有一个实现Observable
的类。这个课与我的活动课分开。是否可以从Observable类编辑视图,或者是否必须通过活动类进行所有编辑?
当然,这个类在我的活动中被实例化为一个对象。
答案 0 :(得分:3)
使用以下示例代码。 您可以将上下文转换为活动,然后您可以在其他类中使用findViewById。 您只需要使用此构造函数传递上下文。
public SampleClass{
SampleClass(Context mContext) {
Activity activity = (mContext instanceof Activity) ? (Activity) mContext : null;
Button mButton = activity.findViewById(R.id.button1);
}
}
答案 1 :(得分:1)
您可以从任何所需的类编辑活动视图,只需将正确的引用传递给它们即可。并确保您在主线程上进行编辑。
答案 2 :(得分:1)
添加到Hitesh的示例中,这是一个包装器,它接受上下文(检索对您的活动的引用)和视图(要测试和控制的元素,例如按钮)
/**
* Sets the text size of a view according to the device's Display Metrics
* @param context
* e.g. an activity containing the view
* @param view
* e.g. a button in the activity
*/
public static void SetTextSizeForDevices(Context context, View view){
Activity activity = (context instanceof Activity) ? (Activity) context : null;
View mView = activity.findViewById(view.getId());
Button mButton;
TextView mTextView;
if(mView instanceof Button){
mButton = (Button) mView;
mButton.setTextSize(TEXTSIZEMULTIPLIER * context.getResources().getDisplayMetrics().density);
}
if(mView instanceof TextView){
mTextView = (TextView) mView;
mTextView.setTextSize(TEXTSIZEMULTIPLIER * context.getResources().getDisplayMetrics().density);
}
}
TEXTSIZEMULTIPLIER可以是全局的例如
private static int TEXTSIZEMULTIPLIER = 16;
在要为
设置文本大小的所有活动视图上调用此静态方法迈克尔