我正在开发一个项目来替换已弃用的资源管理系统(Mac和Windows上的QuickTime资源管理器),并且我一直在使用Qt使用的当前模型,其中使用字符串键从资源文件中检索数据.
例如,我的资源文件中可能有一个图像,"HungryBear.png"存储在我的资源文件中.Qt和我提出的系统将以伪代码描述的方式得到它:
image = GetImageResource("BearPlugin/Images/HungryBear.png");
Run Code Online (Sandbox Code Playgroud)
在那一点上很清楚那个图像是什么,以及它可以在哪里找到.
在我们当前的系统中,我们使用数字.数字的问题在于,必须找到资源文件(可能有很多)来找出它是什么图像(或资源).
一个例子:
oldActiveResourceFile = GetActiveResourceFile(); // think of a stack of resource files
SetActiveResourceFile("BearPlugin");
image = GetImageResource(1);
// Perhaps other resources are retrieved and other functions called
// Possibly introduce problems by calling functions that change "Active Resource File"
SetActiveResourceFile(oldActiveResourceFile);
Run Code Online (Sandbox Code Playgroud)
第一种方法是我在访问资源文件数据的当前系统中看到的.我被告知C#和Java使用它,我知道它们用于字符串键值对等.
然而,我的同行已经表示担心改变当前使用这些数字ID的系统,我正在提议的字符串id.似乎有很多好处,它们解决了我们在当前系统中遇到的许多问题.我希望得到支持文档,建议的系统更好,更可取,所以我的问题是:
您是否知道任何研究或讨论证明在代码中使用字符串标识符(分层)比使用任意数字更好?
笔记
以下是一些已经考虑过的要求,我相信这些要求:
我正在做一些研究来帮助我开发REST API,这是我在任何地方都没有深入讨论的一个主题.
如果我在系统中有用户,使用数字标识符识别用户是否更好
/用户/ 1
或者使用字符串标识符?
/用户/ RSmith
我可以看到每种方法的假设潜在利弊,字符串标识符更易于人类阅读,更不易被发现(不能增加以找到有效用户),并且不需要在数据库中存储另一个数字ID(我不会想通过API公开数据库ID).数字标识符没有固有的含义,因此可以保证是不可变的,而使用字符串id,用户可能希望重命名资源,从而更改资源URI.
这里是否有REST最佳实践,或者最佳方法是否因系统而异?如果是后者,是否还有与每种方法相关的额外利弊?
我想把图像作为布局的背景.
首先,我正在创建一个drawable: Drawable d = Drawable.createFromPath("pathToImageFile");
在API级别8 layout.setBackground( d )的不支持和 layout.setBackgroundDrawable( d ) 不推荐使用 ,所以我需要使用
layout.setBackgroundResource(resourceID)
如何获取动态生成的drawable的resourceID.我正在使用此方法:
Drawable d = Drawable.createFromPath("pathToImageFile");
创造一个可绘制的.
有没有人知道关于resource-id和R.java的内部结构,或者至少可以引用我来阅读更多关于它的内容?
resource-id的含义是什么?他们是apk中的某种地址吗?他们在编译的apk中保存在哪里?
我尝试了一些关于它的信息,但我得到的大部分内容都是导入它的问题以及它的作用和一般情况.
这个问题/答案帖子中的"解决方案#2(动态)":
非常接近我想做的事情,即动态创建图层列表(对于状态栏通知图标,我想在图层中构建我的图标),但通知API中的图标分配需要资源ID(我想从服务中调用).
我无法弄清楚如何构建动态构建图层列表而不构建数百个图层列表.xml文件(对于我希望能够显示的各种图标组合).Daniel的"解决方案#1"非常适用于静态.xml文件,但我正在寻找一种更优雅,更动态的解决方案.
在上面的帖子中,代码片段:
Resources r = getResources();
Drawable[] layers = new Drawable[2];
layers[0] = r.getDrawable(R.drawable.t);
layers[1] = r.getDrawable(R.drawable.tt);
LayerDrawable layerDrawable = new LayerDrawable(layers);
Run Code Online (Sandbox Code Playgroud)
似乎是我想要的,但我不知道或不了解如何将新的layerDrawable"分配"到我的通知图标(它获取资源ID).
感谢所有... stackoverflow是一个很好的资源!
我的这个项目的目标是用用户输入动态更新微调器.不幸的是,我正在失去这场战斗.Logcat不断向我抛出资源ID错误,但是,我不明白为什么它只是按下按钮,不会在onCreate之后抛出,如果那就是问题所在?
Eclipse(通过ctrl + space)告诉我指定包含TextView的布局的资源ID.我甚至不理解为什么我需要一个textview,如果我只是处理一个数组和一个微调器.AndroidDevelopment网站也说同样的话.我只是感到困惑.所以,我的问题是,这个错误意味着什么,我做错了什么?
我相信这是有问题的一行:
list = new ArrayAdapter<String>(this,R.layout.settings,items);
Run Code Online (Sandbox Code Playgroud)
这是.java
package com.example.thepicker;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Spinner;
public class Settings extends Activity implements OnClickListener{
EditText getit;
ImageButton giveit;
Spinner thelist;
ArrayList<String> items;
ArrayAdapter<String> list;
String transit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
items = new ArrayList<String>();
list = new ArrayAdapter<String>(this,R.layout.settings,items);
getit = (EditText) findViewById(R.id.getit);
giveit = (ImageButton) findViewById(R.id.giveit);
thelist = (Spinner) findViewById(R.id.thelist);
thelist.setAdapter(list);
giveit.setOnClickListener(this);
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试包含到我的对话窗口过程中,当收到msg WM_CTLCOLORSTATIC时,我得到正在发送消息的Control的ID.
case WM_CTLCOLORSTATIC:
UINT ID = GetWindowLong((HWND)lParam, GWL_ID);
Run Code Online (Sandbox Code Playgroud)
问题是......当我尝试输入WM_CTLCOLORSTATIC的lParam时,它返回值65535,这是不正确的; 我甚至没有最大UINT ID为65535的资源项.
你能告诉我为什么会这样吗?
resource-id ×7
android ×4
drawable ×2
java ×2
arrays ×1
background ×1
c# ×1
c++ ×1
identifier ×1
layer ×1
r.java-file ×1
resources ×1
rest ×1
textview ×1
winapi ×1