- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我阅读 android 文档找到方法 forceLayout()(在下一个布局请求时生成布局显示)和 requestLayout()(应该立即发布布局请求),但我无法获得他们按照宣传的方式行事。特别是,如果我在 Thread.Sleep 之前和之后设置一个文本,它会等待 Sleep 完成,然后再一次设置两个文本,无论我是否在两者之间调用 forceLayout() 和 requestLayout()。请不要用很多关于我不应该在 UI 线程中调用 Thread.Sleep 的废话来回应。如果我将 Thread.Sleep 包装在 CountDownTimer 中,它会很好地工作(只要我的滴答时间足够短以不干扰 sleep 时间,并且计时器的持续时间足够长以允许 sleep 完成。以下是一个例子:
int i=0;
TextView tv2;
TextView tv1;
LinearLayout ll;
Button bt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ll=new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
tv1=new TextView(this);
tv2=new TextView(this);
bt=new Button(this);
bt.setText("Press to start");
ll.addView(bt);
ll.addView(tv1);
ll.addView(tv2);
tv2.setText("");
setContentView(ll);
bt.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
tv1.setText("starting sleep");
new CountDownTimer(6000,50){
public void onTick(long msuf)
{if(i==1)
{
try{
Thread.sleep(4000);
tv2.setText("waking up");
}
catch(InterruptedException e){};
}
i++;
}
public void onFinish(){}}.start();
}
});
}
最佳答案
[很多关于在 UI 线程中调用 sleep()
的废话]。如果我没听错,你的意思是有类似的东西:
//...inside onTick()
try {
tv2.setText("almost waking up"); // first setText()
Thread.sleep(4000);
tv2.setText("waking up"); // second seText()
}
如果你让你的主线程休眠,它会停止处理任何事情:当前方法、线程循环和消息队列。再次唤醒后,它将完成该方法的执行,第二个 setText()
覆盖第一个,然后让线程循环继续并进行 UI 刷新,仅显示第二个文本。
requestLayout()
和 forceLayout()
实际上都不能使 UI 立即刷新,它们都会在线程中安排布局请求环形。我不确定,但我认为它们之间的区别在于 requestLayout()
由已更改其大小/位置的 View 调用在其父级中,并且 forceLayout()
由需要重新布局的 ViewGroup
调用。
因此[关于在 UI 线程中调用 sleep()
的更多废话]。对于这种情况,如果您不想弄乱多线程,那么在主线程处理程序上调用 postDelayed()
可能是最好的解决方案。
关于android - forceLayout(), requestLayout(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5428719/
我在 GLSurfaceView.Renderer 上有一个 OpenGL 游戏循环(更新+绘制),它在一个单独的线程上运行,而不是创建 GLSurfaceView 子类(包含渲染器)的线程。 有时,
我阅读 android 文档找到方法 forceLayout()(在下一个布局请求时生成布局显示)和 requestLayout()(应该立即发布布局请求),但我无法获得他们按照宣传的方式行事。特别是
我的控制台中收到垃圾邮件警告。我能找到的唯一信息是大多数人在 ListView 中启用快速滚动时得到它。我没有使用任何 ListView 。它说它被 CollapsingToolbarLayout、A
当我尝试在 ListView 中扩展布局时出现以下错误: requestLayout() improperly called by android.widget.TextView{...} durin
我有一个像这样的自定义viewGroup public class CustomLinearLayout extends LinearLayout { public CustomLinearLayou
已经有 some solution here关于如何以编程方式更改按钮尺寸 但是,对我有用的是:Here in this site 作者在其中做了这样的事情: ImageButton someView
我有一个包含图像的折叠工具栏布局,在折叠时显示工具栏标题。我需要更改工具栏标题字体,所以我在工具栏布局中添加了一个 TextView 。现在,每当我折叠工具栏时,都会重复生成以下错误。 08-12 1
我有一个 ListView,它包含由 RelativeLayout 组成的项目: 项目:
根据官方documentation ,如果您需要在不使用繁重的 setText() 例程的情况下更新之前在 TextView 中添加的跨度,您可以保留对需要更新的跨度的引用: Change inter
我有一个非常复杂的 android 应用程序。已经尽可能扁平化 View 层次结构,但我的应用程序仍然存在滞后。例如,有一个菜单,其中的条目可以通过 ValueAnimator 设置高度来折叠/展开。
谁能告诉我如何修复以下跟踪: W/View (16810): requestLayout() improperly called by theme.effects.TopCenterImageV
为了移动 View ,我调用了 setX、setY 和其他一些设置宽度和高度的函数,并在每个函数的末尾调用 invalidate 或 requestLayout。因此,每个用户事件都会多次调用 inv
我正在尝试编写视频播放器代码,它可以很好地播放视频,但我无法调整 SurfaceView 的大小。准备好 MediaPlayer 后,我设置了所需的大小并调用了 requestLayout 或 for
我有一个在水平滚动窗口中按列显示文本和图像的 View 。它重排,因此(至少可能)随着内容的变化而调整自己的大小;当软键盘来来去去以及 View 高度发生变化时,它也会重新排列和调整大小(保持大致恒定
我对 forceLayout() 的角色有点困惑, requestLayout()和 invalidate() View 的方法类。 什么时候叫他们? 最佳答案 为了更好地理解 François BO
我的应用程序必须使用 GridLayout。 GridLayout 的问题是权重的限制,因此我必须在运行时缩放其子项的大小。我在 OnGlobalLayoutListener 的帮助下完成了这项工作。
我在显示 listview 时实现了 listview customadapter,它在下面显示 warring how to reslove it。 requestLayout() improper
我有一个包含两个文本输入字段的布局,它们会随着选项的变化而消失和重新出现。 但是,当我使用属性 app:endIconMode="clear_text" 时,对于两个文本字段,这两个警告会无休止地淹没
我们正在使用 4 版本的 Android 应用程序,我们需要 mysql 连接。我们使用返回数据库结果的 php 文件来执行此操作。以下代码有效,因为如果我们调试项目,我们可以在 System.out
目前我有一个代码,其中有一个 recyclerview 和一个cardview。 recyclerview 适配器将显示卡片列表,对于个别卡片,数据会有所不同。问题就来了。运行应用程序后,我将收到 a
我是一名优秀的程序员,十分优秀!