我正在使用一个ArrayAdapter<CharSequence>来填充要列出的项目android.widget.Spinner.这一切都很好.
但现在我想保持项目列表动态,即我希望能够在运行时添加/删除选择列表中的项目.但是,当我打电话adapter.add(item)或者adapter.remove(item)我总是得到一个时UnsupportedOperationException,即使ArrayAdapter该类的Javadocs 描述这两种方法可用于完全用于预期目的.
这是一个错误,真的没有实现或我在这里缺少什么?
当我看到misc.Android的教程和例子,当涉及到指定的颜色我经常看到这样的常数@color/red或@color/black使用等.出于一些奇怪的原因,永远不会为我工作!我总是需要使用"#RGB",#ARGB,...,#AARRGGBB表示法指定颜色.
很快,当我尝试使用任何这些助记符常量,例如"@ color/red"时,我收到如下错误消息:
[...] C:\Users\mmo\Test\res\drawable\edit_text.xml:5: error: Error: No resource found that matches the given name (at 'drawable' with value '@color/orange').
[...] C:\Users\mmo\Test\res\drawable\myDrawable.xml:3: error: Error: No resource found that matches the given name (at 'drawable' with value '@color/black').
[...] C:\Users\mmo\Test\res\drawable\myDrawable.xml:4: error: Error: No resource found that matches the given name (at 'drawable' with value '@color/black').
[...] C:\Users\mmo\Test\res\drawable\myDrawable.xml:5: error: Error: No resource found that matches the given name (at 'drawable' with value '@color/green').
[...] C:\Users\mmo\Test\res\drawable\myDrawable.xml:6: error: Error: No …Run Code Online (Sandbox Code Playgroud) 我定义了一个EditText字段,我希望在用户编辑该字段时收到通知.所以我想:简单 - 我添加一个OnKeyListener,所以我做了.但即使文本字段被编辑(甚至显示输入/修改的文本),我也没有得到任何回调,即LOG输出没有显示.
TextView text = new TextView(this);
text.setText(...);
...
text.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event) {
TextView tv = (TextView)v;
CharSequence val = tv.getText();
Log.v(TAG, "value: " + val);
// ... rest omitted for brevity
}
});
Run Code Online (Sandbox Code Playgroud)
任何想法,为什么从来没有调用回调?
迈克尔
PS:叹气!Android真的很奇怪!到目前为止,我似乎几乎没有任何东西像人们期望的那样立即工作.并且 - 信不信由你 - 我有很多GUI经验,尤其是.在Java(AWT,Swing,SWT,你的名字......)但Android是一个非常强硬的野兽!
为了给我的应用程序的用户指示哪个字段当前具有焦点我正在尝试根据当前状态更改某些字段的背景颜色,但是,我在理解Androids颜色状态列表资源时遇到了麻烦:
我找到了示例(对不起,URL不再有效),如果我尝试完全相同,即如果我想调整textColor,事情确实有效.但是,如果我尝试的只是略有不同的东西,即相适应的背景颜色,事情不工作,我不明白为什么?为什么这么不一致?
为了更容易理解我想要做什么,我附加了我的混合物..xml文件:
该AndroidManifest.xml文件中:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mmo.android.test"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Test"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
的Test-Activity:
package mmo.android.test;
import android.app.Activity;
import android.os.Bundle;
public class Test extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Run Code Online (Sandbox Code Playgroud)
的res/values/strings.xml: …
在我的开发机器上,我总是需要安装Java 6 和 Java 7,我必须在32位和64位版本中安装每个JDK,以进行测试.由于Java更新的频率似乎变得越来越荒谬(现在每周两次?)每次更新都要求我取消然后重新安装4个 JDK.所以这真的很烦人,因此我想编写整个过程的脚本.
我的问题是,默认情况下,每个JDK版本都安装到包含update-number的目录路径中(默认值:"C:\ Program Files\Java\jdk1.6.0_ <update-nr> \").为了避免我不得不调整大量的构建脚本,我总是手动从安装路径中删除尾随的"_ <update-nr>"并始终安装到相同的"C:\ Program Files\Java\jdk1.6.0"或"C:\ Program Files\Java\jdk1.7.0",分别为64位版本和C:\ Program Files(x86)\ Java\jdk1.6.0"或"C:\ Program Files(x86)\Java\jdk1.7.0",对于32位版本,分别为.
我发现了,如何为JRE安装程序(即Java运行时)指定安装目录:
<jre-installfile>.exe [/s] [INSTALLDIR=<drive>:\<JRE_install_path>]
[STATIC=1] [WEB_JAVA=0/1] [WEB_JAVA_SECURITY_LEVEL=VH/H/M/L]
Run Code Online (Sandbox Code Playgroud)
我还没有找到类似的描述如何指定JDK安装程序的安装目录.
有谁知道是否以及如何指定JDK安装程序的安装路径,以便可以将静默JDK安装指向特定的安装目录?
我想显示一个表格,其中一些字段是可编辑的 - 请参阅此示例:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingLeft="1dip"
android:paddingRight="1dip"
android:paddingBottom="1dip"
android:background="#F00"
>
<ScrollView
android:id="@+id/ScrollView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="vertical"
>
<HorizontalScrollView
android:id="@+id/HorizontalScrollView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="horizontal"
>
<TableLayout
android:id="@+id/ItemPane"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#EEE"
>
<TableRow
android:id="@+id/DataRow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#888"
android:layout_margin="0dp"
android:gravity="left"
>
<TextView
android:id="@+id/NameField"
android:text="Fieldname"
android:background="#EEE"
android:textSize="14dp"
android:layout_margin="1dp"
android:layout_marginBottom="0dp"
android:paddingLeft="3dp"
android:paddingRight="3dp"
/>
<EditText
android:id="@+id/DataField"
android:text="some field"
android:background="#EEE"
android:textSize="14dp"
android:layout_margin="1dp"
android:layout_marginBottom="0dp"
android:paddingLeft="3dp"
android:paddingRight="3dp"
android:singleLine="true"
/>
<EditText
android:id="@+id/DataField2"
android:text="some longish field content..."
android:background="#EEE"
android:textSize="14dp"
android:layout_margin="1dp"
android:layout_marginBottom="0dp"
android:paddingLeft="3dp"
android:paddingRight="3dp"
android:singleLine="true"
/>
</TableRow>
</TableLayout> …Run Code Online (Sandbox Code Playgroud) Android允许创建资源字符串的别名,如:
<resources>
<string name="foo">somestring</string>
<string name="bar">@string/foo</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
资源"bar"成为名为"foo"的资源的别名.
我的应用程序可以将现有资源前缀与不同的后缀组合,即扩展它,如:
<resources>
<string name="foo">foo</string>
<string name="bar">@string/foo+bar</string>
<string name="else">@string/foo+else</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
资源"bar"将产生字符串"foobar".很清楚'+'在这里不起作用,但是还有其他选择来实现这样的字符串连接,这样就可以定义一堆具有公共前缀的字符串资源吗?
我当然意识到我可以在运行时进行这样的资源字符串连接,但是在资源中静态地定义它们会更加优雅和简单.
迈克尔
我正在使用带有 LogBack 的 SpringBoot,我试图将一个特定包(此处显示为“com.example.somepackagename”)的所有日志语句定向到一个文件。所有其他日志语句都应该转到标准输出。
起初遇到的问题是在启动过程中创建了一个文件“LOG_FILE_IS_UNDEFINED”。然后我在这个问题上用谷歌搜索(例如在 github上找到了这个,或者在 StackOverflow上找到了这个和其他一些),但没有一个附加内容真正解决了这个问题。
基于杂项。我使用 logback-spring.xml-file 提出了以下配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}" />
<property name="LOG_FILE" value="${LOG_FILE:-ts-msgs.log}" />
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</encoder>
</appender>
<appender name="MSG_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${LOG_FILE}</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wex</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${LOG_PATH}/archived/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize> …Run Code Online (Sandbox Code Playgroud) 我有一个问题.Android应用程序的资源:
我的申请有误解.模式(编辑/计划/执行),我想用枚举类型来描述.但是,我希望使用源自资源string.xml文件的字符串填充枚举值,即代替
enum Mode {
EDIT ("edit"),
PLAN ("plan"),
EXEC ("exec");
String name;
Mode(String name) { this.name = name; }
@Override
public String toString() { return this.name; }
};
Run Code Online (Sandbox Code Playgroud)
我想写一些类似的东西:
enum Mode {
EDIT (getResources().getText(R.string.mode_edit).toString()),
PLAN (getResources().getText(R.string.mode_plan).toString())),
EXEC (getResources().getText(R.string.mode_exec).toString()));
String name;
Mode(String name) { this.name = name; }
@Override
public String toString() { return this.name; }
}
Run Code Online (Sandbox Code Playgroud)
这将允许使用资源文件修改模式的名称,从而允许以后的名称修改,而无需更改代码,国际化等.
问题是,对资源的标准访问是通过Activity的getResources()方法实现的,该方法仅在构造函数中可用(并且在实例方法中).但是,枚举声明是类的静态初始化代码的一部分.有没有办法以静态方式访问应用程序的资源?
迈克尔
我一次又一次地认为,在开发过程中,Android SDK突然不会重新生成"R"文件.通常这是由于许多.xml文件中的一个出现了一些错误,但是该错误的东西并没有给出轻微的指示,因为它为什么突然拒绝重新生成该文件.
没有任何的我的.xml文件,并手动检查所有的(同时近百!)XML文件中的错误是没有真正的乐趣,或者列出了错误或警告!
是否有一些选项或日志或某些东西可以更快,更直接地找到问题?上次我不得不进行冗长的二进制搜索(即复制和删除第二个测试项目中的文件),试图找到有问题的文件.这真是一场噩梦,而不是它应该在任何体面的SDK中应该得到这个名字!