常用的getResources()系列

本文提供了一种将资源文件应用于Android视图和字符串的实例方法,包括尺寸、颜色、图片和原始资源文件的使用,以及如何通过ID获取多个具有相似前缀的视图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

以例子形式说明如何提取资源文件设置view或sting:

private Context ctx;

TextView mText = (TextView)findViewById(R.id.text);
ImageView mImage = (ImageView)findViewById(R.id.image); 
TextView[] mTextViews;
String[] arrays;
String str; 

 

(1)R.dimen.xxx

mText.setTextSize(TypedValue.COMPLEX_UNIT_PX, 
			ctx.getResources().getDimensionPixelSize(R.dimen.xxx));

 

(2)R.color.xxx

mText.setTextColor(ctx.getResources().getColorStateList(R.color.xxx));
mText.setTextColor(ctx.getResources().getColor(R .color.xxx));

 

(3)R.drawable.xxx

mImage.setImageDrawable(ctx.getResources().getDrawable(R.drawable.xxx))

 

(4)R.raw.xxx

InputStream is = ctx.getResources().openRawResource(R.raw.xxx); 

 

(5)R.array.xxx

arrays = getResources().getStringArray(R.array.xxx);

 

(6)R.string.xxx

str = getResources().getString(R.string.xxx)

 

 (7)getIdentifier
用于view的id名称具有相同的部分,如前缀xxx,利用后面的数字进行区别的view

mTextViews = new TextView[LEN]
for (int i = 0; i < mTextViews.length; i++) {
int resId = getResources().getIdentifier("xxx" + i, "id",packageName);
		mTextViews[i] = (TextView) findViewById(resId);}

 

更用Resources应用参看 http://android.toolib.net/reference/android/content/res/Resources.html

### Android开发中常用的设计模式及其应用场景 在Android开发中,设计模式是一种经过验证的解决方案,能够帮助开发者解决常见问题并优化代码结构。以下是一些常用的Android设计模式及其应用场景: #### 1. 单例模式 (Singleton Pattern) 单例模式确保一个类只有一个实例,并提供全局访问点。它在Android开发中常用于管理共享资源或状态,例如数据库连接、线程池等。 - **应用场景**:`Application` 类通常被用作单例模式的实现[^3]。此外,`SharedPreferences` 和 `ContentProvider` 的使用也符合单例模式。 ```java public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` #### 2. 构建者模式 (Builder Pattern) 构建者模式用于创建复杂对象,通过分步骤设置属性来避免构造函数参数过多的问题。 - **应用场景**:`AlertDialog.Builder` 是构建者模式的经典应用。开发者可以通过链式调用设置对话框的各种属性。 ```java new AlertDialog.Builder(context) .setTitle("Title") .setMessage("Message") .setPositiveButton("OK", null) .create() .show(); ``` #### 3. 适配器模式 (Adapter Pattern) 适配器模式将一个类的接口转换成客户端期望的另一个接口。它在Android开发中广泛应用于列表视图的数据绑定。 - **应用场景**:`RecyclerView.Adapter` 是适配器模式的核心实现[^3]。它将数据集映射到视图组件。 ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { // 创建ViewHolder return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false)); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { // 绑定数据 } @Override public int getItemCount() { return dataList.size(); } static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View itemView) { super(itemView); } } } ``` #### 4. 装饰模式 (Decorator Pattern) 装饰模式允许动态地为对象添加功能,而无需修改其原始代码。 - **应用场景**:`ContextWrapper` 是装饰模式的一个典型例子。它通过包装 `ContextImpl` 来扩展功能[^2]。 ```java public class CustomContextWrapper extends ContextWrapper { public CustomContextWrapper(Context base) { super(base); } @Override public Resources getResources() { Resources resources = super.getResources(); // 自定义逻辑 return resources; } } ``` #### 5. 外观模式 (Facade Pattern) 外观模式为复杂系统提供一个简单的接口,隐藏底层细节。 - **应用场景**:`Activity`、`Service` 和 `Application` 都是通过 `ContextWrapper` 的多态实现,展示了外观模式的应用[^2]。 #### 6. 策略模式 (Strategy Pattern) 策略模式定义一系列算法,并将它们封装在独立的类中,使它们可以互换。 - **应用场景**:`Comparator` 接口是策略模式的典型实现[^3]。它允许开发者根据不同的排序规则动态调整排序逻辑。 ```java Collections.sort(list, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); ``` #### 7. 模板方法模式 (Template Method Pattern) 模板方法模式定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。 - **应用场景**:`AsyncTask` 是模板方法模式的一个经典例子。开发者可以重写 `doInBackground` 和 `onPostExecute` 方法来实现异步任务。 ```java new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... voids) { // 执行耗时操作 return null; } @Override protected void onPostExecute(Void aVoid) { // 更新UI } }.execute(); ``` #### 8. 观察者模式 (Observer Pattern) 观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会得到通知。 - **应用场景**:`BroadcastReceiver` 和 `LiveData` 是观察者模式的典型实现[^3]。它们允许组件监听特定事件并作出响应。 #### 9. 责任链模式 (Chain of Responsibility Pattern) 责任链模式将请求沿着处理者链进行传递,直到有一个处理者处理它为止。 - **应用场景**:`Handler` 和 `Intent` 的分发机制体现了责任链模式的思想。 --- ### 设计模式六大原则简要概述 1. **单一职责原则 (SRP)**:一个类只负责一个功能领域中的相应职责。 2. **开闭原则 (OCP)**:软件实体应对外延开放,对修改关闭。 3. **里氏替换原则 (LSP)**:任何基类出现的地方都可以用派生类替换。 4. **依赖倒置原则 (DIP)**:高层模块不依赖低层模块,两者都依赖抽象。 5. **接口隔离原则 (ISP)**:客户端不应依赖它不需要的接口。 6. **合成复用原则 (CAR)**:尽量使用对象组合,而不是继承来达到复用的目的。 --- ### HashMap 实现原理 `HashMap` 是基于哈希表实现的键值对存储结构。它通过计算键的哈希值定位存储位置,并使用链表或红黑树解决哈希冲突[^1]。 ```java public V put(K key, V value) { if (key == null) { return putForNullKey(value); // 处理null键 } int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } addEntry(hash, key, value, i); return null; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值