我一直试图使用android.preference.DialogPreference从XML中膨胀,但文档似乎缺少一些基本的部分,我无法在任何地方找到一个有效的例子.我的XML现在看起来像这样(我尝试了许多排列,但这似乎是一个合理的最小值):
<DialogPreference
android:key="funThing" android:title="Fun Thing"
android:dialogLayout="@layout/fun_layout"
android:positiveButtonText="OK"
android:negativeButtonText="Cancel"
/>
Run Code Online (Sandbox Code Playgroud)
我在这一点上的假设是它需要子类DialogPreference而不是直接使用它.首先,我找不到将实际偏好值与对话框本身中的元素相关联的方法,这在反射时是一种赠品.而且,看来源DialogPreference.java似乎也证实了这一点.我还注意到官方文档将其称为"基类".但至少,在网上建立一个确定性足够的来源会很有帮助,这将有助于下一个N人比我更快地解决这个问题.
对于记录,日志文件如下所示:
I/ActivityManager( 61): Starting: Intent { cmp=org.jeremy.android/.PreferencesActivity } from pid 2755
W/Resources( 2755): Converting to string: TypedValue{t=0x10/d=0x4b0 a=-1}
W/Resources( 2755): Converting to string: TypedValue{t=0x10/d=0x20 a=-1}
D/AndroidRuntime( 2755): Shutting down VM
W/dalvikvm( 2755): threadid=1: thread exiting with uncaught exception (group=0x40015560)
E/AndroidRuntime( 2755): FATAL EXCEPTION: main
E/AndroidRuntime( 2755): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.jeremy.android/org.jeremy.android.PreferencesActivity}: android.view.InflateException: Binary XML file line #28: Error inflating class …Run Code Online (Sandbox Code Playgroud) 如果我构建一个jinja环境如下:
jinja_environment = jinja2.Environment (
loader=jinja2.FileSystemLoader ((os.path.dirname (__file__), 'templates')), extensions=[])
jinja_environment.globals['url_for'] = webapp2.uri_for
Run Code Online (Sandbox Code Playgroud)
在我的模板中,当路由没有定义任何参数时,我可以从路由名称构建简单的URL:
{{ url_for('user_home') }}
Run Code Online (Sandbox Code Playgroud)
但是,当路由包含由字符串定义的参数时/invoice/<:\d+>,我无法传递任何参数.以下列所有方式调用它会失败,其中包括KeyError "Missing argument "0" to build URI.":
{{ url_for('invoice') }}
{{ url_for('invoice', args=['123']) }}
{{ url_for('invoice', kwargs={'__0__':'123'}) }}
{{ url_for('invoice',_request=None, args=['123'],kwargs={'__0__':'123'}) }}
Run Code Online (Sandbox Code Playgroud)
现有的例子似乎已经过时了 - 至少我无法让它们发挥作用.我错过了什么?
在 中Activity,我手动View从 XML 扩充对象,如下所示:
LayoutInflater inflater = LayoutInflater.from (this);
View topView = inflater.inflate (R.layout.topview_layout, null);
Run Code Online (Sandbox Code Playgroud)
我不会将视图添加到任何显示层次结构中,而是使用它来生成然后显示的位图。由于这些位图将是我的(主)屏幕的大小,因此我尝试导致布局发生:
Display display = ((WindowManager) getSystemService (Context.WINDOW_SERVICE))
.getDefaultDisplay();
topView.measure (display.getWidth (), display.getHeight ());
topView.layout (0, 0, display.getWidth (), display.getHeight ());
Run Code Online (Sandbox Code Playgroud)
(它在上面的代码中获得了正确的显示尺寸。)
topView是一个LinearLayout包含一些其他视图的。其中之一是ImageView:
ImageView childView = (ImageView) pageView.findViewById (R.id.textArea);
Run Code Online (Sandbox Code Playgroud)
然而,在调用以下命令后,该视图似乎从未被告知其尺寸layout():
int childViewWidth = childView.getWidth ();
int childViewHeight = childView.getHeight ();
Run Code Online (Sandbox Code Playgroud)
(上述代码检索到的维度是 0,0。)
上述所有代码都是线性发生的,并且是从我的 Activity 子类的onCreate()方法中调用的。
我正在测试的布局 XML 是:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" …Run Code Online (Sandbox Code Playgroud)