Android:我应该以什么方式将代码与样式分开?

2024-01-20

从 html/php/css 开始 Android 编程,我在网上搜索了一种将代码与样式分开的简单方法 - 现在我需要在列表或表格视图中显示数据库中的数据。

简而言之,我从数据库获取一个游标,迭代它,在代码中动态创建每个列表项作为 TextView。然后我想将外部 xml 布局文件中的样式应用到每个项目。

伪代码:

样式.xml:

//我的风格:粗体,12pt

//你的风格:斜体,11pt

活动:

for (each cursor-entry)
{
  tv1 = new TextView();
  applyStyle(tv, mystyle);

  tv2 = new TextView();
  applyStyle(tv, yourstyle);

  //Apply content to textviews from the cursor...
}
mainLayout.setView(tv1);
mainLayout.setView(tv2);

我在网上找到的代码示例使用多行代码或多个xml文件(使用inflate或cursorAdapters),并且IMO很快就会变得臃肿。我只是想要一种简洁的方式将样式应用于动态创建的代码。这可能吗?


如果您使用 ListView,则拥有一个用于行的 XML 文件非常简单。您唯一需要的是一个 XML 文件和一个 Adapter 类。看一下这个简单的例子:

要从数据库读取数据,请创建一个辅助类,如下所示:

public class MessagingDatabaseAdapter {
    protected SQLiteDatabase database;  

    public MessagingDatabaseAdapter(Context context) {
        MessagingDatabaseHelper databaseHelper = new MessagingDatabaseHelper(context, "message_history_db");
        database = databaseHelper.getWritableDatabase();        
    }

    public void close() {
         database.close();
    }

    public void Entity[] getAllEntities() {
        Entity[] values = null;
        String query = "select * from TABLE_NAME";
        Cursor cursor = null;
        try {
            cursor = database.rawQuery(query, null);
            if( cursor.moveToFirst() ) {
                int s = cursor.getCount();
                values = new Entity[s];
                do {
                    Entity entity = new Entity();
                    entity.setSomeProperty(cursor.getInt(cursor.getColumnIndex(SOME_PROPERTY_COLUMN)));
                    values[i++] = entity;
                } while( cursor.moveToNext() ); 
            }
        } catch(Exception ex) {
        } finally {
            if( cursor != null ) {
                cursor.close();
            }               
            return values;
        }
    }

    protected class MessagingDatabaseHelper extends SQLiteOpenHelper {

        public MessagingDatabaseHelper(Context context, String name) {
            super(context, name, null, 1);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
        db.execSQL("Your SQL to create Tables");
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
    }
}

在您的 Activity 类中:

MessagingDatabaseAdapter db = new MessagingDatabaseAdapter();
values = db.getAllEntities();
db.close();

list_view = (ListView) findViewById(R.id.list_view);
ListAdapter adapter = new ListAdapter(this, values); 
list_view.setAdapter(adapter);

和 ListAdapter 类:

public class ListAdapter extends ArrayAdapter<Entity> {
    final Context context;
    final Entity[] values;      

    public ListAdapter(Context context, Entity[] values) {
        super(context, R.layout.list_screen, values);
        this.values = values;
        this.context = context;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.list_view_item, parent, false);

        TextView datetimeTextView = (TextView) rowView.findViewById(R.id.list_view_datetime_text_view);
        datetimeTextView.setTypeface(someTypeFace);
        return rowView;
    }       
}   

和行布局 XML 文件 (list_view_item.xml):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/BorderedFrame" >

    <TextView
        android:id="@+id/inbox_list_view_datetime_text_view"
        style="@style/MediumText"
        android:layout_width="wrap_content" >
    </TextView>

</RelativeLayout>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:我应该以什么方式将代码与样式分开? 的相关文章

随机推荐

  • 禁用链接以停止 JQuery 中的双击

    我如何禁用所有链接button点击一次后上课 我希望能够在一个地方完成此操作 而不必单独更改所有这些 有什么想法吗 到目前为止我得到了这个 a button click function this attr disabled disable
  • 使用指向非静态成员函数的指针实现回调

    假设我正在开发一个杂货清单管理器 我有一扇窗户 上面有GroceryListDisplay 这是一个显示购物清单上的商品的控件 杂货数据由程序的模型组件存储在GroceryStorage class 要将保存的文件加载到我的程序中 必须使用
  • Flutter SharedPreferences如何加载所有保存的?

    如何加载 SharedPreferences 中保存的所有内容 我保存了很多布尔值 需要将所有布尔值加载到列表中 这就是我保存的方式 SharedPreferences sharedPreferences bool isfavorit ov
  • T-SQL 分割字符串

    我有一个 SQL Server 2008 R2 列 其中包含一个需要用逗号分隔的字符串 我在 StackOverflow 上看到了很多答案 但没有一个在 R2 中有效 我已确保我对任何拆分函数示例具有选择权限 非常感谢任何帮助 我之前用过这
  • R中Box Cox变换故障排除(需要使用for循环或apply)

    请在下面找到我的数据 行是疾病组 0 对照 1 溃疡性结肠炎和 2 克罗恩病 列是基因表达值 structure c 5 54312e 05 5 6112e 06 9 74312e 05 1 3612e 06 1 29312e 05 7 2
  • R 中 nlme 线性混合模型中相互作用显着性的检验

    I use lme函数在nlme用于测试因子水平的 R 包items与因子水平有显着的交互作用condition 因素condition有两个级别 Control and Treatment 以及因子items有 3 个级别 E1 E3 我
  • 如何在ubuntu-18.04上安装nexus

    我需要帮助在 ubuntu 18 04 上安装 nexus oss 我在互联网上找不到任何 apt get 命令 我尝试在 sudo apt get search nexus 中搜索nexus包 但无法获得正确的nexus版本包 我在网上浏
  • Bootstrap Affix 插件内存泄漏

    这些行 https github com twbs bootstrap blob master js affix js L19 L21在引导程序词缀插件中似乎会导致内存泄漏 因为窗口获取对从未释放的词缀实例的引用 作为解决方法 我使用此代码
  • OpenAPI 生成器的 Gradle 配置

    当将 OpenAPI 生成器与 Gradle 一起使用时 我希望将性别源发送到其他源生成器插件使用的标准目录 类似 Maven 生成源的东西 到目前为止 我还无法做到这一点 特别是限制生成 Java 源类而不是整个 原型项目 看来 Open
  • 在 AVX 寄存器内循环字节的有效方法

    摘要 tl 博士 除了进行 2 倍移位并将结果混合在一起之外 还有什么方法可以按位旋转 YMM 寄存器中的字节 使用 AVX 对于 YMM 寄存器中的每 8 个字节 我需要向左旋转 7 个字节 每个字节都需要比前一个字节向左旋转一位 因此
  • 如何为 SASS 变量中的 fs-* 类自定义 Bootstrap 5 字体大小

    如何更改 Bootstrap 5fs 上课于sass 因为在文档 https getbootstrap com docs 5 0 utilities text variables仅显示如何修改h 类如h5 font size 但不是fs c
  • Spring MVC:如何修改从控制器发送的json响应

    我已经使用如下控制器构建了一个 json REST 服务 Controller RequestMapping value scripts public class ScriptController Autowired private Scr
  • 64 位 Windows API:C/C++“DWORD”的大小是多少?

    我只安装了 32 位 Windows 因此我无法亲自验证这一点 如果我没理解错的话 微软API中各个地方使用的DWORD都是参考原来的16位字 和现在的硬件架构无 关 那么 即使我最终编译并链接我的应用程序以在 64 位 Windows 中
  • 有没有办法从 UITableView 中删除分隔线?

    我正在寻找一种在普通模式下完全删除 UITableView 中的分隔线的方法 这是在分组中自动完成的 但这也会以难以测量的方式改变表格的尺寸 我已将分隔线颜色设置为 colorClear 但这并不能完全解决问题 当我尝试在单元格中绘制自定义
  • 将文本文件中的数据读入 VBA 数组

    我有以下 VBA 代码 Sub read in data from txt file Dim dataArray As String Dim i As Integer Const strFileName As String Z sample
  • 使用 Common Lisp 进行排序时出现意外的列表重复

    编辑 解决方案是将第一个 let 形式中的 1 替换为 list 1 这是因为我试图修改文字数据 谢谢您的帮助 我会投赞成票 但显然你需要 15 声望 这是我在这个网站上的第一篇文章 我正在解决一些欧拉计划 https projecteul
  • 如何结合Flyway处理不在序列中的分支的合并

    我刚刚遇到了以下情况 测试服务器当前正在运行 Flyway 版本 1 V1 每当有任何内容推送到测试服务器上时 测试服务器都会自动更新 包括 Flyway 脚本 develop branch 开发人员决定开始在分支上开发新功能feature
  • 根据一组条件将数据框中的值替换为其他数据框中的值

    在 df1 中 我需要将 msec 的值替换为 df2 中的相应值 df1 lt data frame ID c rs rs rs tr tr tr cond c 1 1 2 1 1 2 block c 2 2 4 2 2 4 correc
  • 为什么我不能“转到默认值”或“转到案例 x;”在开关选择结构内?

    C11 第 6 8 1 节 http www iso 9899 info n1570 html 6 8 1 or C99 http www iso 9899 info n1256 html 6 8 1 或第 3 6 1 节C89 http
  • Android:我应该以什么方式将代码与样式分开?

    从 html php css 开始 Android 编程 我在网上搜索了一种将代码与样式分开的简单方法 现在我需要在列表或表格视图中显示数据库中的数据 简而言之 我从数据库获取一个游标 迭代它 在代码中动态创建每个列表项作为 TextVie