แก้ไขข้อความที่โฟกัสได้ภายใน ListView


121

จนถึงตอนนี้ฉันใช้เวลาประมาณ 6 ชั่วโมงและไม่มีอะไรเหลือเลยนอกจากสิ่งกีดขวางบนถนน หลักฐานทั่วไปคือมีบางแถวในListView(ไม่ว่าจะสร้างโดยอะแด็ปเตอร์หรือเพิ่มเป็นมุมมองส่วนหัว) ที่มีEditTextวิดเจ็ตและไฟล์Button. สิ่งที่ฉันต้องการทำก็คือสามารถใช้ jogball / ลูกศรเพื่อนำทางตัวเลือกไปยังแต่ละรายการเหมือนปกติ แต่เมื่อฉันไปที่แถวใดแถวหนึ่ง - แม้ว่าฉันจะต้องระบุแถวอย่างชัดเจน - ที่มีโฟกัสได้ เด็กฉันต้องการให้เด็กคนนั้นโฟกัสแทนที่จะระบุตำแหน่งด้วยตัวเลือก

ฉันได้ลองใช้ความเป็นไปได้มากมายและจนถึงตอนนี้ก็ยังไม่มีโชค

รูปแบบ:

<ListView
    android:id="@android:id/list" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"
    />

มุมมองส่วนหัว:

EditText view = new EditText(this);
listView.addHeaderView(view, null, true);

สมมติว่ามีรายการอื่นในอะแด็ปเตอร์การใช้ปุ่มลูกศรจะย้ายส่วนที่เลือกขึ้น / ลงในรายการตามที่คาดไว้ แต่เมื่อไปที่แถวส่วนหัวจะแสดงด้วยตัวเลือกและไม่มีวิธีใดที่จะมุ่งเน้นไปที่การEditTextใช้ jogball หมายเหตุ: การแตะที่EditText จะโฟกัสไปที่จุดนั้น แต่ต้องอาศัยหน้าจอสัมผัสซึ่งไม่ควรเป็นข้อกำหนด

ListViewเห็นได้ชัดว่ามีสองโหมดในเรื่องนี้:
1. setItemsCanFocus(true)ตัวเลือกจะไม่ปรากฏขึ้น แต่EditTextสามารถรับโฟกัสได้เมื่อใช้ลูกศร อัลกอริธึมการค้นหาโฟกัสยากที่จะคาดเดาและไม่มีการตอบกลับด้วยภาพ (ในแถวใด ๆ : มีลูกที่โฟกัสได้หรือไม่มี) รายการใดที่ถูกเลือกซึ่งทั้งสองอย่างนี้สามารถให้ประสบการณ์ที่ไม่คาดคิดแก่ผู้ใช้ได้
2. setItemsCanFocus(false): ตัวเลือกจะถูกดึงออกมาในโหมดไม่สัมผัสเสมอและEditTextจะไม่สามารถโฟกัสได้แม้ว่าคุณจะแตะที่มันก็ตาม

เพื่อให้เรื่องแย่ลงการโทรeditTextView.requestFocus()กลับเป็นจริง แต่ในความเป็นจริงไม่ได้ให้โฟกัส EditText

สิ่งที่ฉันจินตนาการโดยพื้นฐานคือการผสมกันของ 1 & 2 โดยที่แทนที่จะเป็นการตั้งค่ารายการว่าทุกรายการสามารถโฟกัสได้หรือไม่ฉันต้องการตั้งค่าความสามารถในการโฟกัสสำหรับรายการเดียวในรายการเพื่อให้ตัวเลือกเปลี่ยนจากการเลือก ทั้งแถวสำหรับรายการที่ไม่สามารถโฟกัสได้และข้ามโครงสร้างโฟกัสสำหรับรายการที่มีลูกที่โฟกัสได้

ผู้รับใด ๆ ?

คำตอบ:


101

ขออภัยตอบคำถามของฉันเอง อาจไม่ใช่วิธีแก้ปัญหาที่ถูกต้องหรือสวยงามที่สุด แต่ก็ใช้ได้ผลสำหรับฉันและให้ประสบการณ์การใช้งานที่มั่นคง ฉันตรวจสอบรหัสสำหรับ ListView เพื่อดูว่าเหตุใดพฤติกรรมทั้งสองจึงแตกต่างกันมากและเจอสิ่งนี้จาก ListView.java:

    public void setItemsCanFocus(boolean itemsCanFocus) {
        mItemsCanFocus = itemsCanFocus;
        if (!itemsCanFocus) {
            setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
        }
    }

ดังนั้นเมื่อโทรsetItemsCanFocus(false)ก็ยังตั้งค่าความสามารถในการโฟกัสที่ลดลงเพื่อให้เด็กไม่สามารถโฟกัสได้ สิ่งนี้อธิบายว่าเหตุใดฉันจึงไม่สามารถสลับmItemsCanFocusOnItemSelectedListener ของ ListView ได้ - เนื่องจาก ListView นั้นบล็อกโฟกัสไปที่เด็กทุกคน

สิ่งที่ฉันมีตอนนี้:

<ListView
    android:id="@android:id/list" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent"
    android:descendantFocusability="beforeDescendants"
    />

ฉันใช้beforeDescendantsเพราะตัวเลือกจะถูกดึงออกมาก็ต่อเมื่อ ListView เอง (ไม่ใช่เด็ก) มีโฟกัสดังนั้นพฤติกรรมเริ่มต้นจำเป็นต้องให้ ListView โฟกัสก่อนและดึงตัวเลือก

จากนั้นใน OnItemSelectedListener เนื่องจากฉันรู้ว่ามุมมองส่วนหัวใดที่ฉันต้องการแทนที่ตัวเลือก (จะใช้เวลาทำงานมากขึ้นเพื่อตรวจสอบแบบไดนามิกว่าตำแหน่งใด ๆ มีมุมมองที่โฟกัสได้หรือไม่) ฉันสามารถเปลี่ยนความสามารถในการโฟกัสที่ลดลงและตั้งโฟกัสบน EditText และเมื่อฉันออกจากส่วนหัวนั้นให้เปลี่ยนกลับอีกครั้ง

public void onItemSelected(AdapterView<?> listView, View view, int position, long id)
{
    if (position == 1)
    {
        // listView.setItemsCanFocus(true);

        // Use afterDescendants, because I don't want the ListView to steal focus
        listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
        myEditText.requestFocus();
    }
    else
    {
        if (!listView.isFocused())
        {
            // listView.setItemsCanFocus(false);

            // Use beforeDescendants so that the EditText doesn't re-take focus
            listView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
            listView.requestFocus();
        }
    }
}

public void onNothingSelected(AdapterView<?> listView)
{
    // This happens when you start scrolling, so we need to prevent it from staying
    // in the afterDescendants mode if the EditText was focused 
    listView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
}

สังเกตการsetItemsCanFocusโทรออกที่แสดงความคิดเห็น ด้วยการโทรเหล่านั้นฉันมีพฤติกรรมที่ถูกต้อง แต่setItemsCanFocus(false)ทำให้โฟกัสข้ามจาก EditText ไปยังวิดเจ็ตอื่นนอก ListView กลับไปที่ ListView และแสดงตัวเลือกในรายการที่เลือกถัดไปและการโฟกัสแบบกระโดดนั้นทำให้เสียสมาธิ การลบการเปลี่ยนแปลง ItemsCanFocus และการสลับความสามารถในการโฟกัสแบบลูกหลานทำให้ฉันมีพฤติกรรมที่ต้องการ รายการทั้งหมดวาดตัวเลือกตามปกติ แต่เมื่อไปที่แถวด้วย EditText จะเน้นที่ฟิลด์ข้อความแทน จากนั้นเมื่อดำเนินการต่อจาก EditText นั้นก็จะเริ่มวาดตัวเลือกอีกครั้ง


เจ๋งมากยังไม่ได้ทดสอบ คุณเคยทดสอบ 1.5, 1.6 และ 3.0 หรือไม่?
Rafael Sanches

Rafael Sanches: ฉันไม่ได้สัมผัสโครงการตั้งแต่ 2.1 แต่ในเวลานั้นได้รับการยืนยันว่าทำงานใน 1.5, 1.6 และ 2.1 ฉันไม่รับประกันว่าจะยังใช้งานได้ใน 2.2 หรือใหม่กว่า
โจ

13
จำเป็นเท่านั้น android: inheritantFocusability = "afterDescendants" - อย่างไรก็ตาม +1
kellogs

5
@kellogs: ใช่descendantFocusability="afterDescendants"จะอนุญาตให้ EditText ของคุณโฟกัสภายใน ListView แต่จากนั้นคุณจะไม่ได้รับตัวเลือกรายการในขณะที่นำทางด้วย dpad งานของฉันคือมีตัวเลือกรายการในทุกแถวยกเว้นแถวที่มี EditText ดีใจที่มันช่วยได้ FWIW เราลงเอยด้วยการประเมินการใช้งานนี้อีกครั้งและตัดสินใจว่าการโฟกัสภายใน ListView ไม่ใช่แค่การออกแบบ UI ของ Android แบบสำนวนดังนั้นเราจึงทิ้งแนวคิดนี้เพื่อสนับสนุนแนวทางที่เป็นมิตรกับ Android มากขึ้น
โจ

5
สิ่งนี้ได้รับการทดสอบกับ Ice Cream Sandwich หรือไม่? ฉันไม่สามารถทำงานได้ ขอบคุณ
ราชอนันทาราม

99

สิ่งนี้ช่วยฉันได้
ในรายการของคุณ:

<activity android:name= ".yourActivity" android:windowSoftInputMode="adjustPan"/>

3
ฉันไม่แน่ใจว่าฉันเห็นความเกี่ยวข้อง การตั้งค่า windowSoftInputMode จะเปลี่ยนวิธีที่ IME ปรับส่วนที่เหลือของเนื้อหาหน้าต่างเมื่อเปิดอยู่ ไม่อนุญาตให้คุณเลือกเปลี่ยนประเภทโฟกัสของ ListView คุณช่วยอธิบายเพิ่มเติมได้ไหมว่าสิ่งนี้เกี่ยวข้องกับกรณีการใช้งานเบื้องต้นอย่างไร
โจ

1
@Joe เมื่อเปิด IME เคอร์เซอร์ - และอาจเป็นโฟกัสด้วย - เพียงแค่กระโดดไปมาในหน้าจอของฉันทำให้ไม่สามารถป้อนข้อความได้ ของคุณOnItemSelectedListenerไม่เปลี่ยนสิ่งนั้น อย่างไรก็ตามวิธีง่ายๆของ Iogan ทำงานได้อย่างมีเสน่ห์ขอบคุณ!
Gubbel

2
@ Gubbel: อันที่จริงมันจะไม่เปลี่ยนเลยเพราะคำถามเดิมนั้นเกี่ยวกับบางสิ่งที่แตกต่างไปจากเดิมอย่างสิ้นเชิง :) การแก้ไขของ Logan Glad ใช้งานได้กับสิ่งที่คุณกำลังมองหา แต่ก็ไม่ได้เกี่ยวข้องกับคำถามจากระยะไกล
โจ

8
การใช้android:descendantFocusabilityคุณสมบัติของ Joe บวกนี้ทำให้ฉันEditTextอยู่ในการListViewแก้ไขแป้นพิมพ์อย่างถูกต้องโดยโหวตทั้งสองอย่าง android:descendantFocusabilityโดยตัวมันเองไม่ได้ทำกลอุบายและฉันก็ไม่ได้กระตือรือร้นจากระยะไกลเกี่ยวกับ@Overriding onItemSelectedทั้ง 14 EditTextวินาทีที่ฉันต้องรับมือ :) ขอบคุณ!
Thomson Comer

สิ่งนี้ใช้ได้ผลสำหรับฉัน แต่โปรดสังเกตว่าคุณกำลังใช้ TabHost หรือ TabActivity คุณต้องตั้งค่า android: windowSoftInputMode =” adjustmentPan” สำหรับนิยาม TabActivity ในรายการ
kiduxa

18

งานของฉันคือการใช้งานListViewที่ขยายออกเมื่อคลิก ช่องว่างเพิ่มเติมจะแสดงEditTextตำแหน่งที่คุณสามารถป้อนข้อความได้ แอปควรใช้งานได้บน 2.2+ (สูงสุด 4.2.2 ในขณะที่เขียนสิ่งนี้)

ฉันลองวิธีแก้ปัญหามากมายจากโพสต์นี้และอื่น ๆ ที่ฉันหาได้ ทดสอบกับอุปกรณ์ 2.2 สูงสุด 4.2.2 ไม่มีวิธีแก้ปัญหาใดที่พึงพอใจในทุกอุปกรณ์ 2.2+ แต่ละโซลูชันมีปัญหาที่แตกต่างกัน

ฉันต้องการแบ่งปันวิธีแก้ปัญหาสุดท้ายของฉัน:

  1. ตั้งค่า listview เป็น android:descendantFocusability="afterDescendants"
  2. ตั้งค่า listview เป็น setItemsCanFocus(true);
  3. ตั้งค่ากิจกรรมของคุณให้android:windowSoftInputMode="adjustResize" หลายคนแนะนำadjustPanแต่adjustResizeให้ ux imho ที่ดีกว่ามากเพียงทดสอบสิ่งนี้ในกรณีของคุณ ด้วยadjustPanคุณจะได้รับรายการด้านล่างที่ถูกบดบังเช่น เอกสารแนะนำว่า ("โดยทั่วไปเป็นที่ต้องการน้อยกว่าการปรับขนาด") นอกจากนี้ใน 4.0.4 หลังจากที่ผู้ใช้เริ่มพิมพ์บนแป้นพิมพ์แบบนิ่มหน้าจอจะเลื่อนไปด้านบน
  4. บน 4.2.2 โดยadjustResizeมีปัญหาบางอย่างเกี่ยวกับโฟกัส EditText วิธีแก้คือใช้ rjrjr solution จากกระทู้นี้ มันดูน่ากลัว แต่มันไม่ใช่ และได้ผล แค่ลองดู.

เพิ่มเติม 5.เนื่องจากอะแดปเตอร์ถูกรีเฟรช (เนื่องจากการปรับขนาดมุมมอง) เมื่อEditTextได้รับการโฟกัสในเวอร์ชันก่อน HoneyComb ฉันพบปัญหาเกี่ยวกับมุมมองที่กลับด้าน: การรับ View สำหรับรายการ ListView / ลำดับย้อนกลับบน 2.2; ทำงานบน 4.0.3

หากคุณกำลังทำแอนิเมชั่นบางอย่างคุณอาจต้องการเปลี่ยนลักษณะการทำงานadjustPanสำหรับเวอร์ชันก่อนรังผึ้งเพื่อให้การปรับขนาดไม่เริ่มทำงานและอะแดปเตอร์จะไม่รีเฟรชมุมมอง คุณก็ต้องเพิ่มอะไรแบบนี้

if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB)
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

ทั้งหมดนี้ให้ ux ที่ยอมรับได้บนอุปกรณ์ 2.2 - 4.2.2 หวังว่ามันจะช่วยคนได้บ้างเพราะต้องใช้เวลาอย่างน้อยหลายชั่วโมงกว่าจะได้ข้อสรุปนี้


1
แค่ขั้นตอนแรกและครั้งที่สองก็เพียงพอแล้วในกรณีของฉัน
Kalpesh Lakhani

ทำงานได้อย่างสมบูรณ์กับ xElement.setOnClickListener (.. ) ของฉันใน ArrayAdapter และ ListView.setOnItemClickListener (... ) - ในที่สุด !! ขอบคุณมาก
Javatar

10

สิ่งนี้ช่วยชีวิตฉัน --->

  1. ตั้งค่าบรรทัดนี้

    ListView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

  2. จากนั้นในรายการของคุณในแท็กกิจกรรมให้พิมพ์สิ่งนี้ ->

    <activity android:windowSoftInputMode="adjustPan">

เจตนาตามปกติของคุณ


7

เรากำลังพยายามทำสิ่งนี้ในรายการสั้น ๆ ที่ไม่ได้ทำการรีไซเคิลใด ๆ จนถึงตอนนี้ดีมาก

XML:

<RitalinLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
  <ListView
      android:id="@+id/cart_list"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:scrollbarStyle="outsideOverlay"
      />
</RitalinLayout>

Java:

/**
 * It helps you keep focused.
 *
 * For use as a parent of {@link android.widget.ListView}s that need to use EditText
 * children for inline editing.
 */
public class RitalinLayout extends FrameLayout {
  View sticky;

  public RitalinLayout(Context context, AttributeSet attrs) {
    super(context, attrs);

    ViewTreeObserver vto = getViewTreeObserver();

    vto.addOnGlobalFocusChangeListener(new ViewTreeObserver.OnGlobalFocusChangeListener() {
      @Override public void onGlobalFocusChanged(View oldFocus, View newFocus) {
        if (newFocus == null) return;

        View baby = getChildAt(0);

        if (newFocus != baby) {
          ViewParent parent = newFocus.getParent();
          while (parent != null && parent != parent.getParent()) {
            if (parent == baby) {
              sticky = newFocus;
              break;
            }
            parent = parent.getParent();
          }
        }
      }
    });

    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
      @Override public void onGlobalLayout() {
        if (sticky != null) {
          sticky.requestFocus();
        }
      }
    });
  }
}

แก้ไขเล็กน้อยวิธีนี้ใช้ได้กับฉันหลังจาก 2 วันของ@ # ( : if (sticky! = null) {sticky.RequestFocus (); sticky.RequestFocusFromTouch (); sticky = null;}
Chris van de Steeg

4

โพสต์นี้ตรงกับคำหลักของฉันทุกประการ ฉันมีส่วนหัว ListView ที่มีการค้นหา EditText และปุ่มค้นหา

เพื่อให้โฟกัสไปที่ EditText หลังจากสูญเสียโฟกัสเริ่มต้นสิ่งเดียวที่ฉันพบคือ:

    searchText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // LOTS OF HACKS TO MAKE THIS WORK.. UFF...
            searchButton.requestFocusFromTouch();
            searchText.requestFocus();
        }
    });

เสียเวลาไปหลายชั่วโมงและไม่ใช่การแก้ไขที่แท้จริง หวังว่ามันจะช่วยคนยาก


2

หากรายการเป็นแบบไดนามิกและมีวิดเจ็ตที่โฟกัสได้ตัวเลือกที่เหมาะสมคือใช้RecyclerViewแทน ListView IMO

วิธีการแก้ปัญหาที่ชุดadjustPan, FOCUS_AFTER_DESCENDANTSหรือด้วยตนเองจำตำแหน่งที่มุ่งเน้นเป็นจริงเพียงแค่วิธีการแก้ปัญหา พวกเขามีกรณีที่มุม (ปัญหาการเลื่อน + แป้นพิมพ์อ่อน, คาเร็ตเปลี่ยนตำแหน่งใน EditText) พวกเขาไม่ได้เปลี่ยนความจริงที่ว่า ListView สร้างมุมมองที่ทำลาย / en massenotifyDataSetChangedในช่วง

ด้วย RecyclerView คุณจะแจ้งเตือนเกี่ยวกับการแทรกการอัปเดตและการลบแต่ละรายการ มุมมองที่โฟกัสไม่ได้ถูกสร้างขึ้นใหม่ดังนั้นจึงไม่มีปัญหากับการควบคุมฟอร์มที่สูญเสียโฟกัส ในฐานะโบนัสเพิ่มเติม RecyclerView จะเคลื่อนไหวการแทรกและการลบรายการในรายการ

นี่คือตัวอย่างจากเอกสารอย่างเป็นทางการเกี่ยวกับวิธีเริ่มต้นใช้งานRecyclerView: คู่มือสำหรับนักพัฒนา - สร้างรายการด้วย RecyclerView


1

บางครั้งเมื่อคุณใช้android:windowSoftInputMode="stateAlwaysHidden"ใน manifest activity หรือ xml เวลานั้นจะสูญเสียโฟกัสของแป้นพิมพ์ ดังนั้นก่อนอื่นให้ตรวจสอบคุณสมบัตินั้นใน xml และ manifest ของคุณว่ามีอยู่หรือไม่เพียงแค่ลบออก หลังจากเพิ่มตัวเลือกเหล่านี้ลงในไฟล์ manifest ใน side activity android:windowSoftInputMode="adjustPan"แล้วเพิ่มคุณสมบัตินี้ใน listview ใน xmlandroid:descendantFocusability="beforeDescendants"


0

อีกวิธีง่ายๆคือกำหนด onClickListener ของคุณในเมธอด getView (.. ) ของ ListAdapter ของคุณ

public View getView(final int position, View convertView, ViewGroup parent){
    //initialise your view
    ...
    View row = context.getLayoutInflater().inflate(R.layout.list_item, null);
    ...

    //define your listener on inner items

    //define your global listener
    row.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            doSomethingWithViewAndPosition(v,position);
        }
    });

    return row;

ด้วยวิธีนี้แถวของคุณสามารถคลิกได้และมุมมองภายในของคุณด้วย :)


1
คำถามเกี่ยวข้องกับโฟกัสไม่ใช่ความสามารถในการคลิก
โจ

0

ส่วนที่สำคัญที่สุดคือการทำให้โฟกัสทำงานสำหรับเซลล์รายการ โดยเฉพาะอย่างยิ่งสำหรับรายการบน Google TV สิ่งนี้จำเป็น:

วิธีsetItemsCanFocusของมุมมองรายการทำเคล็ดลับ:

...
mPuzzleList = (ListView) mGameprogressView.findViewById(R.id.gameprogress_puzzlelist);
mPuzzleList.setItemsCanFocus(true);
mPuzzleList.setAdapter(new PuzzleListAdapter(ctx,PuzzleGenerator.getPuzzles(ctx, getResources(), version_lite)));
...

xml เซลล์รายการของฉันเริ่มต้นดังนี้:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/puzzleDetailFrame"
             android:focusable="true"
             android:nextFocusLeft="@+id/gameprogress_lessDetails"
             android:nextFocusRight="@+id/gameprogress_reset"
...

nextFocusLeft / Right ยังมีความสำคัญสำหรับการนำทาง D-Pad

สำหรับรายละเอียดเพิ่มเติมโปรดดูคำตอบอื่น ๆ ที่ยอดเยี่ยม


0

ฉันเพิ่งพบทางออกอื่น ฉันเชื่อว่ามันเป็นการแฮ็กมากกว่าวิธีแก้ปัญหา แต่ใช้ได้กับ Android 2.3.7 และ android 4.3 (ฉันได้ทดสอบ D-pad เก่า ๆ ที่ดีด้วย)

เริ่มการดูเว็บของคุณตามปกติและเพิ่มสิ่งนี้: (ขอบคุณ Michael Bierman)

listView.setItemsCanFocus(true);

ระหว่างการโทร getView:

editText.setOnFocusChangeListener(
    new OnFocusChangeListener(View view,boolean hasFocus){
        view.post(new Runnable() {
            @Override
            public void run() {
                view.requestFocus();
                view.requestFocusFromTouch();
            }
     });

มุมมองในมุมมองนี้คืออะไร
Narendra Singh

นี่เป็นคำตอบเก่า แต่อ้างถึงมุมมองในขอบเขตที่กำหนดให้เป็นข้อโต้แย้งของ OnFocusChangeListener ที่ฉันเชื่อ
alaeri

1
มันทำให้เกิดการวนซ้ำในการเปลี่ยนโฟกัส
Morteza Rastgoo

0

ลองแค่นี้

android:windowSoftInputMode="adjustNothing"

ใน

กิจกรรม

ส่วนรายการของคุณ ใช่มันจะปรับค่า nothings ซึ่งหมายความว่า editText จะยังคงอยู่ในตำแหน่งเดิมเมื่อเปิด IME แต่นั่นเป็นเพียงความไม่สะดวกเล็กน้อยที่ยังช่วยแก้ปัญหาการสูญเสียโฟกัสได้อย่างสมบูรณ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.