我有一个后台线程来更新我的活动的UI,之后onCreate().它可以添加布局,也可以更改其他布局.
我只是想检测布局传递何时在我的活动中完成,以便能够手动更新其他视图的位置,这些视图直接取决于刚刚加入或修改的布局.
现在,我只是用Handler一个postDelayed runnable触发的modifs后,没有工作,一个小的延迟之后,围绕50-100毫秒requestLayout().
它有效,但我们可以看到延迟.我想尽快完成这项工作.在视图代码中,检测测量过程很简单,但我没有找到如何在活动中直接解决这个问题.
好的,所以我编辑了这个问题因为它不够清楚.
编辑2:更新了JSON文件.
我在Android应用程序中使用GSON,我需要解析来自服务器的JSON文件,并且有点过于复杂.我不希望我的对象结构太重,所以我想简化内容:所以我的对象的结构将不是JSON文件的结构.
例如,如果在JSON中我有这个:
{
"object1":{
"attribute1" : "test1",
"attribute40" : "test40",
"user":{
"id":1,
"name":"foo"
}
,"example":{
"total":10,
"list":[
{
"tag":"tag1",
"name":"object name 1",
"pos":1
},
{
"tag":"tag10",
"name":"object name 10",
"pos":10
}
]
}
}
"object2":{
"attribute1":"test..."
}
}
Run Code Online (Sandbox Code Playgroud)
我不想保留我当前的对象结构,一个Example包含an ArrayList和int"total"的对象.但我想只保留一个带有值的简单String "object name 1;object name 2;...".
此外,我想只存储用户ID,而不是完整的用户,因为我已经将完整的用户存储在其他地方,并且还有其他服务器API调用.
所以我的班级类似于:
class Foo{
int userId;
String example; //"object name 1;object name 2;..."
...
}
Run Code Online (Sandbox Code Playgroud)
所以我想我们可以使用自定义反序列化器实现这一点,但我找不到.我想尽可能减少内存,所以我不认为有一个完整的对象示例,然后用它来构建我String example是一种正确的方法.
在最坏的情况下,如果它太复杂,我希望能够在解析示例对象时至少只存储Tag项列表:所以我需要一个自定义反序列化器来摆脱int total.
所以我会:
class Foo{ …Run Code Online (Sandbox Code Playgroud) 我的设计师在Illustrator上工作,并使用脚本导出mdpi,hdpi和xhdpi(以及iOS res)的所有资源.对于按钮和可伸缩图像,我正在寻找生成9个补丁的最佳解决方案.
到目前为止,我在SDK中使用draw9patch soft来生成9个补丁.它仍然有效,但严重的是,我希望有更好的方法.如果在我的项目中我有20个按钮,有3个或4个状态,并且有3种密度类型,我无法想象这个解决方案需要的小时数.
解决方案是使用Asset Studio工具,但我不想提供我的xhdpi文件,并为其他密度文件夹获取生成不佳的图像.我的目标是为每个密度获得像素完美的9个补丁.
我们还尝试将SVG文件用于可伸缩图像,但似乎Asset Studio不接受它们.
如果我的设计师试图直接在Illustrator中制作9patch,他就不能使用脚本导出,因为1 px线也会缩放,并且不再测量1px.
那么有没有一个解决方案可以制作9个补丁而不会丢失图像质量,而且不需要花费10个小时的时间?
我需要能够ListView动态地添加和删除页眉和页脚.
所以我用我的页眉和页脚初始化我的活动,然后在某些时候我想隐藏它们,后来我需要添加以前的页眉和页脚,并保持相同Adapter.
所以我找到了这个解决方案,但它很难看,我真的希望还有另外一种方法.
基本上,我必须设置一个空适配器才能添加标题视图,然后设置一个空适配器来添加页脚视图.为了完成我设置我的真正适配器.
编辑:我必须补充一点,使用visibility属性(GONE&VISIBLE)不是解决方案,因为在我的中间过程中,页眉和页脚视图不能在适配器中.
public class TestAdapterHeader extends ListActivity implements OnClickListener {
private static String[] items = { "test 1", "test 2", "test 3", "test 4",
"test 5", "test 6", "test 7", "test 8", "test 9", "test 10",
"test 11", "test 12", "test 13", "test 14", "test 15", "test 16",
"test 17", "test 18", "test 19", "test 20" };
private ArrayAdapter mAdapter;
private LinearLayout mParentView;
private TextView mHeaderView, mFooterView;
private boolean mViewsHidden = false;
@Override …Run Code Online (Sandbox Code Playgroud) 好的,我遇到了listView的attribut layout_width的问题.
在我的项目中,我的listview的背景图像不符合屏幕的宽度.所以我在wrap_content上设置了layout_width,并且我将listView水平居中.
看起来这是一个坏主意,因为在适配器中,GetView方法被调用的次数是显示的单元格数的3倍以上.如果我在fill_parent上设置layout_width,问题就解决了.我创建了一个显示问题的简单项目.
这是活动的xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
item_list xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp" >
</TextView>
Run Code Online (Sandbox Code Playgroud)
最后活动:
package fr.example.android.listviewbug;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
public class ExampleListViewBugActivity extends ListActivity{
public static int cpt;
public static final String[] COUNTRIES = new String[] {
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
"Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina", …Run Code Online (Sandbox Code Playgroud) 好吧,所有内容都在标题中:如果我们用lineSpacingMultiplier或更改TextView的行间距,则TextView lineSpacingExtra的最后一行也会添加额外的内容.
结果是我们在视图的底部有间距,好像我们有一个底部填充.文本看起来并不在视图中居中,因此布局的设计并不性感.
这真的是正确的行为还是错误?有没有办法删除最后一行的这个间距?