小编and*_*per的帖子

如何在 MPAndroidChart 中为每个条添加自定义值和图像?

背景

我使用 MPAndroidChart 来显示一个相对简单的条形图。

问题

我需要设置两件事,但我不知道如何自定义:

  1. 我需要为每个条添加文本,而不是简单的值,它本身也是样式化的。

  2. 在每个条形的顶部,我需要放置各种类型的可绘制对象来覆盖它的宽度(例如,一个条形中的蓝色高度为 2dp,或另一个条形上具有相同高度的黄色渐变)。

这是我需要做的演示:

在此处输入图片说明

我发现了什么

  1. 我已经检查了文档,但到目前为止我唯一发现的是将值放在栏上方,使用setDrawValueAboveBarhttps : //github.com/PhilJay/MPAndroidChart/wiki/Specific-Chart-Settings-&-Styling

  2. 我知道我也可以使用 来添加图标,setDrawIcons但这似乎不适用于应该占用整个条宽的可绘制对象。

问题

正如我所写,我想知道上述是否可行,以及如何:

  1. 如何在每个条形上方设置自定义的样式值?

  2. 如何将不同的 drawable 设置为“坐在”每个栏的顶部?

  3. 如果#2 是不可能的(甚至可能是),是否可以将 drawable 设置为条形本身?例如,有些条形是纯灰色,而有些条形具有可绘制的渐变黄色?

android bar-chart mpandroidchart

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

如何在 Android 上使用协程进行不间断取消,包括根据生命周期自动取消?

背景

AsyncTask我在从简单(已弃用)迁移到Android 时Executors遇到问题Kotlin Coroutines

问题

我无法找到如何执行我可以在AsyncTask甚至Executors使用上完成的基本操作Kotlin Coroutines

过去,我可以选择在有或没有线程中断的情况下取消任务。现在,出于某种原因,考虑到我在协程上创建的任务,它只是不间断的,这意味着如果我运行一些甚至在其中“睡眠”的代码(并不总是由我执行),它就不会被中断。

我还记得有人告诉我,协程在 Android 上非常好用,因为如果你在 Activity 中,它会自动取消所有任务。但我找不到如何做到这一点的解释。

我尝试过并发现了什么

对于协程任务(Deferred根据我所看到的调用),我想我已经读到,当我创建它时,我必须选择它将支持哪种取消,并且由于某种原因我不能同时拥有它们。不确定这是否属实,但我仍然想知道,因为我想同时拥有两者以获得最佳迁移。我曾经使用 AsyncTask 将它们添加到一个集合中(并在取消时将其删除),以便在 Activity 完成后,我可以查看所有内容并取消它们。我什至为我开设了一个很好的课程。

这是我为了测试这个而创建的:

class MainActivity : AppCompatActivity() {
    val uiScope = CoroutineScope(Dispatchers.Main)
    val bgDispatcher: CoroutineDispatcher = Dispatchers.IO

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        loadData()
    }

    private fun loadData(): Job = uiScope.launch {
        Log.d("AppLog", "loadData")
        val task = async(bgDispatcher) {
            Log.d("AppLog", "bg start")
            try {
                Thread.sleep(5000L) //this could be any executing …
Run Code Online (Sandbox Code Playgroud)

android activity-lifecycle android-lifecycle android-asynctask kotlin-coroutines

4
推荐指数
2
解决办法
4439
查看次数

android - 在滚动视图中显示视图时通知的方式?

我有一个简单的问题:

假设我对 scrollView(或水平滚动视图)有一些看法。有什么方法可以添加一个监听器,它会告诉我这样的视图何时进入可见区域的内部和外部?

我见过的唯一类似问题是: Android:如何检查 ScrollView 中的视图是否可见? 但我想在发生此类事件时得到通知(变得隐藏/可见)。

android view listener hide scrollview

3
推荐指数
1
解决办法
4964
查看次数

listview内存异常,但没有内存泄漏?

在Honeycomb之后,Google表示位图是由堆管理的(这里谈到),所以如果不再可以访问位图,我们可以假设GC处理它并释放它.

我想创建一个演示,显示为listView讲座(从这里)显示的想法的效率,所以我做了一个小应用程序.该应用程序允许用户按下按钮,然后列表视图一直滚动到底部,而它有10000个项目,其内容是android.R.drawable项目(名称和图像).

出于某种原因,即使我没有保存任何图像,我也会内存不足,所以我的问题是:它怎么可能?我错过了什么?

我已经在Galaxy S III上测试了应用程序,但是如果我使用适配器的原生版本,我会不断出现内存异常.我不明白为什么会这样,因为我不存储任何东西.

这是代码:

public class MainActivity extends Activity
  {
  private static final int LISTVIEW_ITEMS =10000;
  long                     _startTime;
  boolean                  _isMeasuring   =false;

  @Override
  public void onCreate(final Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ListView listView=(ListView)findViewById(R.id.listView);
    final Field[] fields=android.R.drawable.class.getFields();
    final LayoutInflater inflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    // listen to scroll events , so that we publish the time only when scrolled to the bottom:
    listView.setOnScrollListener(new OnScrollListener()
      {
        @Override
        public void onScrollStateChanged(final AbsListView view,final int scrollState)
          {
          if(!_isMeasuring||view.getLastVisiblePosition()!=view.getCount()-1||scrollState!=OnScrollListener.SCROLL_STATE_IDLE)
            return;
          final long …
Run Code Online (Sandbox Code Playgroud)

android garbage-collection out-of-memory android-3.0-honeycomb android-4.0-ice-cream-sandwich

3
推荐指数
1
解决办法
8511
查看次数

Volley - NetworkImageView有时不显示错误图像?

因此,我决定尝试使用Google IO 2013上显示的新Volley库.

我已经尝试过使用简单的解决方案NetworkImageView来显示多个图像GridView.

它工作得很好,并显示图像,但如果我让它下载图像,然后我在下载过程中关闭WiFi,它不会显示错误,好像一切仍然加载.不仅如此,如果我恢复连接,它不会恢复加载.

为什么会发生,我该如何解决?也许它实际上是一个错误?

这是我的示例代码,如果有人想尝试一下(BitmapCacheLru代码在这里):

public class MainActivity extends Activity {
    private static final int COLUMNS_COUNT = 4;
    private RequestQueue _requestQueue;
    private ImageLoader _imageLoader;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        _requestQueue=Volley.newRequestQueue(this);
        _imageLoader=new ImageLoader(_requestQueue, new BitmapLruCache());

        final GridView gridView = new GridView(this);
        gridView.setNumColumns(COLUMNS_COUNT);
        final int screenWidth = getResources().getDisplayMetrics().widthPixels;

        gridView.setAdapter(new BaseAdapter() {
            @Override
            public View getView(final int position, final View convertView, final ViewGroup parent) {
                NetworkImageView …
Run Code Online (Sandbox Code Playgroud)

error-handling android internet-connection android-volley networkimageview

3
推荐指数
1
解决办法
7426
查看次数

场景与片段和视图

背景

在过去,谷歌提出了碎片类(我也问过我们何时应该使用它,这里).

现在,Android 4.4有一个名为" Scene " 的新框架类.

根据我所读过的内容(并在讲座中观看,例如此处),它应该可以帮助您处理状态之间的动画和过渡.

这个问题

其实我有几个问题:

  1. 在哪些情况下我会知道何时使用它?它仅适用于动画并被视为您应用的"奖励"吗?或者它是否也提供了像碎片和活动这样的逻辑?

  2. 使用它和为动画制作每个视图设置动画有什么区别?

  3. 这有官方样品吗?

  4. 是否有任何兼容性库,要在4.4之前的版本上使用它?

android transitions android-fragments android-view

3
推荐指数
1
解决办法
3783
查看次数

如何打开/关闭飞行模式,即使在新的Android版本(甚至是root)上?

从Android 4.2开始,使用普通API不支持打开/关闭飞行模式.

它应该在授予WRITE_SECURE_SETTINGS权限时起作用,但这仅适用于系统应用程序(正如我所读).

要在具有root的设备上执行该操作应该怎么做?

系统应用程序是否还需要root才能切换飞行模式?

android root airplane

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

`context.getColor`中`theme`有什么用?

背景

从API 23开始,不建议使用获取颜色getColor(仅通过为其提供资源ID)的小方法:

在此处输入图片说明

相反,我们被告知也要使用包含Theme参数的方法:

在API级别23中不推荐使用此方法。请改用getColor(int,Theme)。

https://developer.android.com/reference/android/content/res/Resources.html#getColor(int,android.content.res.Resources.Theme

问题

文档对的内容不多说theme

在此处输入图片说明

https://developer.android.com/reference/android/content/res/Resources.html#getColor(int,android.content.res.Resources.Theme

我发现了什么

通过Internet搜索,我能找到的就是我们可以使用支持库来获取颜色:

ContextCompat.getColor(context, R.color.color_name);
Run Code Online (Sandbox Code Playgroud)

这有点奇怪,因为在幕后,似乎并没有对主题做任何事情。这是它的代码:

@ColorInt
    public static final int getColor(@NonNull Context context, @ColorRes int id) {
        if (Build.VERSION.SDK_INT >= 23) {
            return context.getColor(id);
        } else {
            return context.getResources().getColor(id);
        }
    }
Run Code Online (Sandbox Code Playgroud)

查看Context.getColor,我可以看到:

在此处输入图片说明

在我看来,它使用的是活动的主题?

问题

  1. “主题”参数的目的是什么?

  2. 如何使用?是否有关于它的任何样本/教程/文章?

  3. 为什么仍然不推荐使用该功能?对我来说仍然可以安全使用...

  4. 支持库功能有什么用?与不赞成使用的功能有何不同?

android android-theme android-resources

3
推荐指数
1
解决办法
1996
查看次数

我是否需要在 onDestroy() 事件上调用 removeObserver 进行生命周期?

这是一个非常简单的问题:

背景

我正在使用相对较新的Lifecycle 类android 架构组件库的一部分)以Activity/Fragment更简单的方式处理一些事件。

这是你如何使用它来处理ON_DESTROY事件:

            lifecycle.addObserver(object : LifecycleObserver {
                @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
                fun onDestroy() {
                    lifecycle.removeObserver(this)
                    //Do something
                }
            })
Run Code Online (Sandbox Code Playgroud)

问题

我无法在文档和此处找到,是应该调用removeObserver还是在ON_DESTROY事件时自动完成。

我试过的

我试图阅读它,现在作为预防措施,我总是调用removeObserver.

问题

它是安全的避免调用removeObserverON_DESTROY事件?

android android-lifecycle android-architecture-lifecycle

3
推荐指数
1
解决办法
3079
查看次数

如何在高于默认的 BottomNavigationView 上添加指示器?

背景

我试图拥有更大一点的 BottomNavigationView (高度更大一点),同时还使每个项目图标都有一个顶部指示器,表明它已被选中。

类似的东西,但高度更大:

在此输入图像描述

在屏幕截图中很难看到它,但该指示器显示在 BottomNavigationView 项目的最顶部,位于 BottomNavigationView 阴影的正下方。

问题

当我设置较大的高度时,每个项目仍然采用较小的高度,因此指示器不会看顶部:

在此输入图像描述

不仅如此,因为我曾经itemBackground将每个项目的背景设置为具有指示器,所以现在它没有用于点击效果的背景。

我发现了什么

关于高度,我在 StackOverflow 上发现了这个关于更改高度的问题。唯一的解决方案是覆盖库的尺寸。在这种情况下,只有这样:

<dimen name="design_bottom_navigation_height" tools:override="true">...</dimen>
Run Code Online (Sandbox Code Playgroud)

然而,这仅解决了将指标置于顶部的问题。

另外,它看起来像是一个肮脏的解决方案,强制为库设置尺寸,正如我所写,因为我使用了itemBackground,它不再具有正常的点击效果。

这是相关代码,根据Android Studio的向导进行了一些修改,用于制作“底部导航活动”。其余的与那里相同:

活动主文件

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/container" xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context=".MainActivity">

    <TextView
        android:id="@+id/message" android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginStart="@dimen/activity_horizontal_margin"
        android:layout_marginTop="@dimen/activity_vertical_margin" android:text="@string/title_home"
        app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view" android:layout_width="0dp"
        android:layout_height="@dimen/tabs_height" android:layout_marginEnd="0dp"
        android:layout_marginStart="0dp" android:background="?android:attr/windowBackground" app:itemBackground="@drawable/activity_main__tab_background"
        app:labelVisibilityMode="unlabeled" app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu"/>

</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

尺寸.xml

<dimen name="tabs_height">64dp</dimen>
<dimen name="design_bottom_navigation_height" tools:override="true">@dimen/tabs_height</dimen>
Run Code Online (Sandbox Code Playgroud)

Activity_main__tab_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <layer-list>
            <item android:gravity="top">
                <shape android:shape="rectangle">
                    <size …
Run Code Online (Sandbox Code Playgroud)

android bottomnavigationview

3
推荐指数
1
解决办法
3154
查看次数