質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1225閲覧

EditText が改行により画面上部まで迫り上がった際に操作不能になり ANR が発生する

doughnut

総合スコア31

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

2クリップ

投稿2020/09/12 15:55

編集2020/09/13 15:11

前提

以下のような UI を持つ Android アプリケーションを作成しています。

Header: ツールバー、タブ。CoordinatorLayout で管理され、上スクロール時にツールバーが畳まれるように実装しています。
Body: Scroll 可能な RecyclerView を持つ Fragment がセットされた ViewPager
Footer: EditText (行数制限ナシ)

下スクロール時上スクロール時
イメージ説明イメージ説明

実現したいこと

  • この構成で、EditText で改行が行われた場合にも問題なく拡大可能にしたい。

発生している問題・エラーメッセージ

  • 改行により、EditText が Header 辺りまで拡大された際に ANR が発生する。
2020-09-13 00:03:01.811 1161-1177/? E/ActivityManager: ANR in com.example.scrollingbehaviorwithedittext (com.example.scrollingbehaviorwithedittext/.MainActivity) PID: 3622 Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. waitqueue length = 4, head.seq = 82170, Wait queue head age: 8935.3ms.) Load: 35.9 / 35.38 / 35.32 CPU usage from 14292ms to 0ms ago (2020-09-13 00:02:44.561 to 2020-09-13 00:02:58.854): 105% 3622/com.example.scrollingbehaviorwithedittext: 104% user + 1.4% kernel / faults: 29089 minor 17% 1161/system_server: 11% user + 5.8% kernel / faults: 9055 minor 161 major 2.7% 18435/com.google.android.gms.persistent: 1.6% user + 1.1% kernel / faults: 1682 minor 135 major 2.3% 1436/com.android.systemui: 1.2% user + 1.1% kernel / faults: 486 minor 1 major 2.1% 30401/com.google.android.googlequicksearchbox:search: 2% user + 0% kernel / faults: 4376 minor 62 major 1.8% 27026/adbd: 0.5% user + 1.2% kernel / faults: 1134 minor 1.7% 993/hisi_rxdata: 0% user + 1.7% kernel 1.6% 596/surfaceflinger: 0.9% user + 0.7% kernel / faults: 746 minor 23 major 1.5% 403/logd: 0.9% user + 0.5% kernel / faults: 168 minor 1 major 1.4% 990/hisi_hcc: 0% user + 1.4% kernel 1.3% 1624/com.huawei.powergenie: 0.7% user + 0.5% kernel / faults: 397 minor 2 major 1.2% 223/mmc-cmdqd/0: 0% user + 1.2% kernel 1.1% 703/hiview: 0.4% user + 0.7% kernel / faults: 66 minor 26 major 1% 131/kswapd0: 0% user + 1% kernel 0.7% 279/irq/333-0-001c: 0% user + 0.7% kernel 0% 681/media.extractor: 0% user + 0% kernel / faults: 1785 minor 98 major 0.7% 899/oal_gpio_rx_dat: 0% user + 0.7% kernel 0.7% 1642/com.android.phone: 0.5% user + 0.1% kernel / faults: 162 minor 31 major 0.6% 27946/logcat: 0.4% user + 0.2% kernel / faults: 1723 minor 0.5% 597/powerlogd: 0.4% user + 0% kernel / faults: 115 minor 0.4% 563/android.hardware.graphics.composer@2.1-service: 0% user + 0.4% kernel / faults: 1 minor 0.4% 904/hisi_frw/0: 0% user + 0.4% kernel 0.4% 2682/kworker/u16:1: 0% user + 0.4% kernel 0.3% 588/vendor.huawei.hardware.sensors@1.0-service: 0.1% user + 0.2% kernel 0.2% 404/servicemanager: 0% user + 0.2% kernel / faults: 17 minor 0.2% 3677/kworker/u16:10: 0% user + 0.2% kernel 0.2% 3991/com.google.android.gms: 0.1% user + 0.1% kernel / faults: 414 minor 2 major 0.2% 7/rcu_preempt: 0% user + 0.2% kernel 0.2% 583/vendor.huawei.hardware.light@2.0-service: 0% user + 0.1% kernel 0.2% 1564/com.huawei.systemmanager:service: 0.2% user + 0% kernel / faults: 227 minor 1 major 0.2% 2735/kworker/u16:9: 0% user + 0.2% kernel 0.2% 3268/com.google.process.gapps: 0.1% user + 0% kernel / faults: 373 minor 0.2% 3409/kworker/u16:4: 0% user + 0.2% kernel 0.1% 1//init: 0.1% user + 0% kernel / faults: 213 minor 10 major 0.1% 202/kworker/0:1H: 0% user + 0.1% kernel 0.1% 480/zygote64: 0% user + 0.1% kernel / faults: 150 minor 0.1% 657/displayengineserver: 0% user + 0.1% kernel / faults: 84 minor 26 major 0.1% 1673/com.huawei.android.launcher: 0.1% user + 0% kernel / faults: 36 minor 0.1% 3372/kworker/u16:3: 0% user + 0.1% kernel 0% 3410/kworker/u16:6: 0% user + 0% kernel 0.1% 3484/kworker/u17:2: 0% user + 0.1% kernel 0% 20/ksoftirqd/2: 0% user + 0% kernel 0% 35/ksoftirqd/5: 0% user + 0% kernel 0% 44/migration/7: 0% user + 0% kernel 0% 45/ksoftirqd/7: 0% user + 0% kernel 0% 58/mailbox-13: 0% user + 0% kernel 0% 85/sys_heap: 0% user + 0% kernel 0% 204/cfinteractive: 0% user + 0% kernel 0% 245/hw_kstate: 0% user + 0% kernel 0% 352/kworker/4:1H: 0% user + 0% kernel 0% 405/hwservicemanager: 0% user + 0% kernel / faults: 6 minor 0% 479/netd: 0% user + 0% kernel / faults: 156 minor 35 major 0% 587/vendor.huawei.hardware.power@1.0-service: 0% user + 0% kernel / faults: 1 minor 0% 594/lmkd: 0% user + 0% kernel / faults: 12 minor 0% 654/audioserver: 0% user + 0% kernel / faults: 96 minor 33 major 0% 655/cameraserver: 0% user + 0% kernel / faults: 183 minor 97 major 0% 67

該当のソースコード

MainActivity.java

java

1public class MainActivity extends AppCompatActivity { 2 private ViewPager viewPager; 3 private Toolbar toolbar; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 10 viewPager = findViewById(R.id.view_pager); 11 toolbar = findViewById(R.id.toolbar); 12 13 ContentsPagerAdapter adapter = new ContentsPagerAdapter(getSupportFragmentManager()); 14 viewPager.setAdapter(adapter); 15 16 setSupportActionBar(toolbar); 17 getSupportActionBar().setTitle("Title"); 18 getSupportActionBar().setElevation(0); 19 } 20}

MainFragment.java

java

1public class MainFragment extends Fragment { 2 3 private RecyclerView recyclerView; 4 5 // The higher the number of elements, the more pronounced the ANR becomes. 6 private final static int LIST_ELEM_NUM = 20000; 7 8 @Override 9 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 10 return inflater.inflate(R.layout.fragment_main, container, false); 11 } 12 13 @Override 14 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 15 super.onViewCreated(view, savedInstanceState); 16 17 ArrayList<String> strings = new ArrayList<>(); 18 for (int i = 0; i < LIST_ELEM_NUM; ++i) { 19 strings.add(Integer.toString(i)); 20 } 21 22 recyclerView = view.findViewById(R.id.recycler_view); 23 recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 24 recyclerView.setAdapter(new RecyclerAdapter(getContext(), strings)); 25 } 26}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.coordinatorlayout.widget.CoordinatorLayout android:id="@+id/body" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/edit_text"> <com.google.android.material.appbar.AppBarLayout android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_scrollFlags="scroll|enterAlways|snap" /> <com.google.android.material.tabs.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#992244"/> </com.google.android.material.appbar.AppBarLayout> <androidx.viewpager.widget.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" android:hapticFeedbackEnabled="false" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </androidx.coordinatorlayout.widget.CoordinatorLayout> <EditText android:id="@+id/edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="#666666" android:hint="EditText." android:padding="12.5dp" /> </RelativeLayout>

試したこと

試した内容から、以下が判っています。

  • ViewPager (とセットした Fragment) を削除し、MainActivity に直接 RecyclerView を持たせた場合は ANR が発生しない。

・Fragment を複数持たせ横スクロール可能にしたい為、解決策にはならない。

  • RecyclerView にセットするリストの要素数が少なければ少ないほど、操作不能な時間は短くなる。

・要素数が 100 程度では ANR は発生しないが、実装ではより多くの要素数を持たせたい為解決策にはならない。

  • ViewPager に app:layout_behavior="@string/appbar_scrolling_view_behavior" を指定しない場合 ANR は発生しない。

・RecyclerView が Header に被らないようにしたい為、解決策にはならない。

  • EditText を CoordinatorLayout に内包した場合 ANR は発生しない。

・Footer は固定したいが、スクロール時に EditText が隠れてしまう為解決策にならない。

  • ViewPager2 への移行を試したが、以前として ANR は発生する。

補足情報(FW/ツールのバージョンなど)

  • 開発環境: Android Studio 4.0.1
  • 検証端末: Sony Xperia XZ3 (Android 10), Huawei Nova lite 2 (Android 8.0)

・両端末で同様の事象が起こることを確認しています。

・提示しきれなかったコードはこちらから確認下さい。開発環境によっては gradle のバージョンを下げる必要があります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Layout の Parent を RelativeLayout で作成していましたが、ConstraintLayout で置き換えることで問題となっていた事象は発生しなくなりました。

修正差分は以下になります。

https://github.com/d0ughnut/ScrollingBehaviorWithEditTextSample/commit/e77000db232c185635cda557c73ce576d26e4991

細かい部分は追々確認するとして、一旦自己解決とさせて頂きます。

投稿2021/08/08 18:49

doughnut

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問