标签: android-ui

在工作线程内创建视图

我需要从EditText生成一个位图,然后对其执行一些操作.我主要担心的是不要View.buildDrawingCache()在UI线程上调用方法并且可能阻止它,特别是在谈论大屏幕(即Nexus 10)时,因为EditText它将占据可用屏幕大小的大约80%.

Runnable在一个内部执行s ThreadPoolExecutor,这将在工作线程上膨胀虚拟视图并为它们设置所有必需的属性,然后只需调用buildDrawingCache()&getDrawingCache()生成一个位图.

这在某些设备上运行良好但是最近我遇到了一些因以下消息而崩溃的设备:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Run Code Online (Sandbox Code Playgroud)

我理解为什么会这样,因为有些手机必须修改实施EditText,创建一个Handler,因此需要Looper.prepare()首先被调用.

从我在网上看到的内容,在工作线程中调用Looper.prepare()没有问题,虽然有人说这是非常不推荐但我找不到原因.

除此之外,与此问题相关的大多数帖子都表明您不应该在后台线程中夸大视图,可能是由于Android的官方文档(进程和线程)中的以下内容:

"Do not access the Android UI toolkit from outside the UI thread"
Run Code Online (Sandbox Code Playgroud)
  • 处理此问题的推荐方法是什么?

  • 从主线程调用build/get drawingcache有什么害处吗?(性能明智)

  • 在我的工作线程中调用Looper.prepare()会解决这个问题吗?

编辑

为了详细说明我的具体要求,我有一个用户界面,包括一个ImageView和一个自定义的EditText,EditText可以根据用户选择改变它的字体和颜色,它可以使用"放大/缩小".捏缩放"手势也可以拖动以允许用户将其重新定位在图像上方.

最后,我所做的是使用当前在UI上完全相同的值(宽度,高度,位置)在工作线程内创建一个虚拟视图,然后生成它的绘图缓存,原始图像的位图再次从本地文件解码.

一旦两个位图准备就绪,我将它们合并到一个位图中以备将来使用.

简单来说,执行以下代码(从后台线程中)有什么问题:

呼叫Looper.prepare()创建应用程序上下文一个新的观点,称measure()layout()手动,然后建立+从它那里得到drawingcache,即:

Looper.prepare();

EditText view = new EditText(appContext);

view.setText("some text");
view.setLayoutParams(layoutParams);

view.measure(
        View.MeasureSpec.makeMeasureSpec(targetWidth, View.MeasureSpec.EXACTLY),
        View.MeasureSpec.makeMeasureSpec(targetHeight, View.MeasureSpec.EXACTLY)); …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-ui android-layout

16
推荐指数
1
解决办法
3552
查看次数

如何在android中创建模态对话框

我想为我的应用程序创建模态对话框.

所以当模态对话框打开时,其他活动被阻止.没有像后退按钮或按下主页按钮那样的事件.

并在该对话框取消和确定两个选项按钮.

谢谢...

android modal-dialog android-ui

15
推荐指数
4
解决办法
5万
查看次数

java.lang.IllegalStateException:ScrollView只能托管一个直接子项

我只是尝试通过添加scrollview添加滚动浏览此布局的功能,但每次我尝试加载布局时,我都会收到一条错误,指出"java.lang.IllegalStateException:ScrollView只能托管一个直接子项",我不确定为什么.

任何建议都非常感谢.

资源:

<?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="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical" >

    <RelativeLayout>

        <View
            android:layout_width="1dp"
            android:layout_height="5dp" >
        </View>

        <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" >

            <com.google.android.youtube.player.YouTubePlayerView
                android:id="@+id/youtubeplayerview"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />

            <View
                android:layout_width="1dp"
                android:layout_height="5dp" >
            </View>

            <TextView
                android:id="@+id/textView1a"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Isaac Daniel at CNN Anderson Cooper"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <TextView
                android:id="@+id/textView2a"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="by idconex"
                android:textAppearance="?android:attr/textAppearanceSmall" />

            <TextView
                android:id="@+id/textView3a"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="675,000,000 views"
                android:textAppearance="?android:attr/textAppearanceSmall" />

            <com.google.android.youtube.player.YouTubePlayerView
                android:id="@+id/youtubeplayerview2"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/textView1b"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Rage Against The Machine - Bulls on Parade"
                android:textAppearance="?android:attr/textAppearanceMedium" …
Run Code Online (Sandbox Code Playgroud)

java xml android android-ui android-layout

15
推荐指数
1
解决办法
4万
查看次数

Android WebView HTML能否影响键盘或键盘功能?

我有一个带有信用卡输入表格的webview(带有标准<input type="text" />字段).在不同版本的Android中,我会得到不同的键盘.Kit-Kat似乎在表单内部不显示Prev/ Next键.

  1. 在网络方面,我对此有任何影响吗?
  2. 如果没有,我应该向Android方面的开发者推荐什么?

没有Prev/的示例Next:

相同的webview,带Prev/ Next:

在此输入图像描述

android android-ui android-webview android-softkeyboard

15
推荐指数
1
解决办法
5697
查看次数

在Android应用中删除通知栏阴影

在android中,顶部的通知栏大部分时间都有阴影.但是,有时,例如当应用程序显示标题栏时,或者在某些其他情况下(例如在Twitter应用程序或市场中),阴影效果消失.我的猜测是,当下面的内容可以滚动时,阴影应该在那里.

但是,在我的应用程序中,下面的内容无法滚动,我认为徽标顶部的阴影看起来很糟糕.

有谁知道如何禁用它?

java android android-ui

13
推荐指数
1
解决办法
7025
查看次数

如何在TextView Android中增加文本与下划线之间的空间?

我想增加文本和下划线之间的空间.我可以改变行高,但我不会改变文本之间的高度和下划线.我怎么能这样做?

private static final String FONTH_PATH = "fonts/Brandon_bld.otf";

...

selectTextView = (TextView) findViewById(R.id.selectTextView);
selectTextView.setTypeface(font);

SpannableString content = new SpannableString(getResources().getString(R.string.select_your_prove_type));
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
selectTextView.setText(content);

...
Run Code Online (Sandbox Code Playgroud)

和xml文件

<TextView
android:id="@+id/selectTextView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="536"
android:gravity="left"
android:lineSpacingMultiplier="0.8"
android:text="@string/select_your_prove_type"
android:textColor="@color/Blue"
android:textSize="@dimen/select_size" />
Run Code Online (Sandbox Code Playgroud)

android android-ui android-layout

13
推荐指数
2
解决办法
1万
查看次数

从ICS ActionBar切换到Lollipop工具栏后,缺少导航图标

我有一个活动,包含许多片段,使用操作栏和导航抽屉.它启用了"home as up".我已经实现了正确的逻辑,只有顶级片段显示动作栏抽屉切换图标,其他片段显示箭头.我通过以下方式实现了

mDrawerToggle.setDrawerIndicatorEnabled(false);
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerList);
Run Code Online (Sandbox Code Playgroud)

现在旧的v4支持库ActionBarDrawerToggle已被弃用.我已经和new一起切换到v7版本Toolbar以获得Material Design外观.在抽屉打开之后"向上"箭头被正确显示,但是当执行上述代码时它完全消失.

这是支持库中的错误还是我必须做一些不同的事情来显示"向上"箭头而不是抽屉指示器?

android android-ui android-actionbar-compat android-5.0-lollipop android-toolbar

13
推荐指数
2
解决办法
8891
查看次数

在Android 5.0中设置弹出菜单的样式

我正在为Android 5.0准备我的应用程序,我正在使用最新的兼容性库,这是我的样式.

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/theme_accent</item>
        <item name="colorAccent">@color/theme_accent_secondary</item>
    </style>

    <style name="AppThemeDark" parent="Theme.AppCompat">
        <item name="colorPrimary">@color/theme_accent</item>
        <item name="colorAccent">@color/theme_accent_secondary</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

(正在以编程方式设置ActionBar颜色.)

现在,我希望溢出/弹出菜单具有类似于holo实现中的深色背景,但我无法使其工作,这是它的样子: 在此输入图像描述

我试过设置popupMenuStyle但它没有用.

如何让弹出菜单变暗?

android android-ui android-support-library material-design android-5.0-lollipop

13
推荐指数
4
解决办法
3万
查看次数

在android中创建持久搜索栏

我想要一个位于布局顶部的搜索框,如下所示:

在此输入图像描述 http://www.google.com/design/spec/patterns/search.html#search-in-app-search

我不知道是否必须使用文本框,白框等自己构建它,或者已经有内置小部件或开源工作.

实际上从头开始设计一切对我来说似乎并不合适.因为通过这样做,我将在未来的Android API中具有不兼容的视图或用户体验.

有哪些选择,最常用的方法是什么?

android android-widget android-ui

13
推荐指数
1
解决办法
6225
查看次数

像Android中的卡片布局

我想制作像Google Cards这样的Android布局,我知道有一个开源库,但我只想要布局和灰色六角背景样式.我找不到有关这方面的信息,我怎么能做到这一点?我附加新的谷歌地图v7布局,这样你就可以得到这个想法. 谷歌地图布局

android android-ui android-layout

12
推荐指数
1
解决办法
1万
查看次数