0

기본 언어를 아랍어 (ar)로 설정했으며 Alcatel 장치 (버전 6 Marshmallow)에서 예상대로 작동합니다. 그러나이 장치를 삼성 장치 (버전 4.1.2 JellyBean) 툴바 (상단 & 하단)는 RTL 레이아웃 요소로 표시되지 않습니다. 아래 둘 모두의 이미지를 확인하십시오.RTL 레이아웃 요소가 모든 장치에서 올바르게 작동하지 않습니다.

알카텔보기도

enter image description here
작업.

enter image description here

당신은 상단 도구 모음을하지 두 장치에서 동일한 순서 & 하단 도구 모음의 요소를 볼 수 있습니다 예상대로

그리고 삼성보기가 작동하지 않습니다. 상단 툴바에 두 개의 서랍 구성 요소가 있습니다 (왼쪽에는 Gravity End의 사용자 계정 관련 정보 목록이있는 Gravity Start &). 그래서 그들은 삼성에 너무 잘 보이지 않습니다.

이제 마지막으로 화면 영역에 사용할 수있는 데이터에 따라 다른 레이아웃 유형을 나타내는 recyclerview 세로가 있습니다. 이 Layouts의 위치 또한 삼성에서는 올바르지 않습니다.

참고 : recyclerview 부분은 언어 변경으로 인해 작동하지 않으며 English에서 앱을 실행할 때도 다릅니다.

편집 : 내 어댑터 데이터를 준비하고 중첩 된 recyclerview를 설정하는 클래스입니다.

package com.qemasoft.alhabibshop.app.controller; 

import android.content.Context; 
import android.support.v7.widget.GridLayoutManager; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.qemasoft.alhabibshop.app.R; 
import com.qemasoft.alhabibshop.app.Utils; 
import com.qemasoft.alhabibshop.app.model.MyCategory; 
import com.qemasoft.alhabibshop.app.model.MyItem; 
import com.qemasoft.alhabibshop.app.model.MyPromotion; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.List; 

import static com.qemasoft.alhabibshop.app.AppConstants.findStringByName; 
import static com.qemasoft.alhabibshop.app.AppConstants.getHomeExtra; 


/** 
* Created by Inzimam on 17-Oct-17. 
*/ 

public class MainFragmentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    private final static int CATEGORY_VIEW = 0; 
    private final static int PROMOTION_VIEW = 1; 
    private final static int ITEM_VIEW = 2; 

    private List<String> keysStrList; 
    private CategoryAdapter categoryAdapter; 
    private ItemAdapter itemAdapter; 

    private List<Object> myAllItemsList = new ArrayList<>(); 


    private Context context; 
    private Utils utils; 


    public MainFragmentAdapter(List<String> keysList) { 
     this.keysStrList = keysList; 
     prepareData(); 
     Log.e("AllItemTypeSize = ", myAllItemsList.size() + ""); 
    } 

    @Override 
    public int getItemViewType(int position) { 

     Log.e("getItemViewType ", myAllItemsList.get(position).getClass() + ""); 
     Object o = myAllItemsList.get(position); 
     if (o instanceof List) { 
      for (Object obj : (List) o) { 
       if (obj instanceof MyCategory) { 
        Log.e("InsideInstenceof", "Success"); 
        return CATEGORY_VIEW; 
       } 
      } 
      return ITEM_VIEW; 
     } else if (o instanceof MyPromotion) { 
      return PROMOTION_VIEW; 
     } else { 
      return ITEM_VIEW; 
     } 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     RecyclerView.ViewHolder viewHolder; 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     Log.e("itemType = ", "ViewTypeOnCreate " + viewType); 
     switch (viewType) { 
      case CATEGORY_VIEW: 
       View v1 = inflater.inflate(R.layout.layout_main_frag_categories, parent, false); 
       viewHolder = new ViewHolder1(v1); 
       break; 
      case PROMOTION_VIEW: 
       View v2 = inflater.inflate(R.layout.discout_layout, parent, false); 
       viewHolder = new ViewHolder2(v2); 
       break; 
      default: 
       View v3 = inflater.inflate(R.layout.layout_main_frag_categories, parent, false); 
       viewHolder = new ViewHolder1(v3); 
       break; 
     } 
     this.context = parent.getContext(); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     int itemType = holder.getItemViewType(); 
     Log.e("itemType = ", itemType + ""); 
     Object o = myAllItemsList.get(position); 
     RecyclerView.LayoutManager mLayoutManagerCat = null; 
     if (o instanceof List) { 
      List<Object> list = (List<Object>) myAllItemsList.get(position); 

      int layoutColumns = 2; 
      if (list.size() < 4) { 
       layoutColumns = 1; 
      } 
      mLayoutManagerCat = 
        new GridLayoutManager(context, layoutColumns, 
          LinearLayoutManager.HORIZONTAL, false); 
     } 
     switch (itemType) { 
      case CATEGORY_VIEW: 
       ViewHolder1 vh1 = (ViewHolder1) holder; 
       vh1.getmRecyclerView().setLayoutManager(mLayoutManagerCat); 
       vh1.getTitle().setText(findStringByName(keysStrList.get(position))); 
       vh1.getmRecyclerView().setAdapter(new CategoryAdapter(
         (List<MyCategory>) myAllItemsList.get(position))); 
       break; 
      case PROMOTION_VIEW: 
       ViewHolder2 vh2 = (ViewHolder2) holder; 
       configureViewHolder2(vh2, position); 
       break; 
      default: 
       ViewHolder1 vh3 = (ViewHolder1) holder; 
       vh3.getmRecyclerView().setLayoutManager(mLayoutManagerCat); 
       vh3.getTitle().setText(findStringByName(keysStrList.get(position))); 
       vh3.getmRecyclerView().setAdapter(new ItemAdapter(
         (List<MyItem>) myAllItemsList.get(position))); 
       break; 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return keysStrList.size(); 
    } 


    private void configureViewHolder2(ViewHolder2 vh2, int position) { 
     MyPromotion promotion = (MyPromotion) myAllItemsList.get(position); 
     if (promotion != null) { 
      vh2.getTitle().setText(promotion.getTitle()); 
      vh2.getDescription().setText(promotion.getDescription()); 
     } 
    } 

    private void prepareData() { 

     List<MyCategory> myCategoryList = new ArrayList<>(); 
     List<MyItem> myItemList; 

     String responseStr = getHomeExtra(); 
     try { 
      JSONObject responseObject = new JSONObject(responseStr); 
      Log.e("JSON_Response", "" + responseObject); 
      boolean success = responseObject.optBoolean("success"); 
      if (success) { 
       JSONObject homeObject = responseObject.optJSONObject("home"); 
       JSONObject modules = homeObject.optJSONObject("modules"); 

       for (int a = 0; a < keysStrList.size(); a++) { 
        Log.e("KeyStr = ", keysStrList.get(a)); 
        if (keysStrList.get(a).equals("categories")) { 
         JSONArray featuredCategories = modules.optJSONArray(keysStrList.get(a)); 
         for (int i = 0; i < featuredCategories.length(); i++) { 
          JSONObject categoryObject = featuredCategories.getJSONObject(i); 
          MyCategory myCategory = new MyCategory(categoryObject.optString("category_id"), 
            categoryObject.optString("name"), categoryObject.optString("thumb")); 
          myCategoryList.add(myCategory); 
         } 
         myAllItemsList.add(myCategoryList); 
        } else if (keysStrList.get(a).equals("promotion")) { 
         JSONArray promotionArray = modules.optJSONArray("promotion"); 
         JSONObject promotionObject = promotionArray.optJSONObject(0); 
         MyPromotion myPromotion = new MyPromotion(promotionObject.optString("id"), 
           promotionObject.optString("name"), 
           promotionObject.optString("description")); 
         myAllItemsList.add(myPromotion); 

        } else { 
         myItemList = new ArrayList<>(); 
         JSONArray featuredProduct = modules.optJSONArray(keysStrList.get(a)); 
         for (int i = 0; i < featuredProduct.length(); i++) { 
          JSONObject productObj = featuredProduct.getJSONObject(i); 
          MyItem myItem = new MyItem(productObj.optString("product_id"), 
            productObj.optString("name"), productObj.optString("dis"), 
            productObj.optString("price"), productObj.optString("thumb")); 
          myItemList.add(myItem); 
         } 
         myAllItemsList.add(myItemList); 
        } 
       } 
      } else { 
       Log.e("SuccessFalse", "Within getCategories"); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
      Log.e("JSONEx_CatAdapterTest", responseStr); 
     } 
    } 

    public class GenericList<T> extends ArrayList<T> { 
     private Class<T> genericType; 

     public GenericList(Class<T> c) { 
      this.genericType = c; 
     } 

     public Class<T> getGenericType() { 
      return genericType; 
     } 
    } 

} 
+1

1 호야 안드로이드 개발자 블로그에 전체 RTL 지원이 링크를 확인하십시오 https://android-developers.googleblog.com/2013/03/native-rtl- support-in-android-42.html 2. 앱의 언어 변경시 'RecyclerView'에 '레이아웃 관리자'를 올바르게 지정 했습니까? –

+0

좋아, 그리고 영어로 잘 작동하지 않는 recyclerview는 어떨까요? –

+0

'RecyclerView'가'GridView'로 작동하게하려면'Recyclerview's''ItemDecoration' 클래스를 사용하거나 다른 방법으로 처리 할 수 ​​있습니다. 단지'GridLayoutManager'를'SpanCount'로 전달하면됩니다. 방법. 생성자'new GridLayoutManager (activity, 2)'는'GridLayoutManager (Context context, int spanCount)'에 관한 것이다. 여기서'spanCount'는 그리드 내의 열의 수이다. [https://stackoverflow.com/a/40587169/5343866](https://stackoverflow.com/a/40587169/5343866) –

답변