2017-02-06 42 views
1

我有一個recyclerView,它在水平導航欄之類的活動下面水平顯示圖標。讓recyclerView物品適合屏幕

RecyclerView適配器和活動

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_realuser_int); 
    Intent intent= new Intent(this,ListenKeyword.class); 
    startService(intent); 

    horizontal_recycler_view= (RecyclerView) findViewById(R.id.horizontal_recycler_view); 
    Horizontalicons = new ArrayList<>(); 
    Horizontalicons.add(R.drawable.home); 
    Horizontalicons.add(R.drawable.clock); 
    Horizontalicons.add(R.drawable.records); 
    Horizontalicons.add(R.drawable.menu); 
    horizontalAdapter=new HorizontalAdapter(Horizontalicons); 


    LinearLayoutManager horizontalLayoutManagaer = new LinearLayoutManager(realuserIntActivity.this, LinearLayoutManager.HORIZONTAL, false); 
    horizontal_recycler_view.setLayoutManager(horizontalLayoutManagaer); 
    horizontal_recycler_view.setAdapter(horizontalAdapter); 

    user=(TextView) findViewById(R.id.textUser); 

} 

public class HorizontalAdapter extends RecyclerView.Adapter<HorizontalAdapter.MyViewHolder> { 
    String[]iconnames={"Home", "History", "History", "Menu"}; 
    private List<Integer> Horizontalicons; 
    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public ImageView imgIcons; 

     public MyViewHolder(View view) { 
      super(view); 
      imgIcons = (ImageView) view.findViewById(R.id.imgrecycler); 

     } 
    } 


    public HorizontalAdapter(List<Integer> Horizontalicons) { 
     this.Horizontalicons = Horizontalicons; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.iconrecycler, parent, false); 

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, final int position) { 
     holder.imgIcons.setImageResource(Horizontalicons.get(position)); 

     holder.imgIcons.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(realuserIntActivity.this, iconnames[position], Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

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

XML文件

<android.support.v7.widget.RecyclerView 
    android:id="@+id/horizontal_recycler_view" 

    android:background="#263238" 
    android:layout_width="match_parent" 
    android:layout_height="70dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" /> 

CUSTOM XML被充氣IN RECYCLERVIEW

<ImageView 
    android:layout_width="63dp" 
    android:layout_height="63dp" 
    android:id="@+id/imgrecycler" 
    android:layout_marginTop="9dp" 
    android:layout_marginRight="97dp" 
    android:paddingLeft="30dp" 
    /> 

我試過在三種不同的設備上運行它。我面臨的問題是,在一個屏幕較小(電話)的設備上只有三個圖標顯示,看到最後一個圖標,你將不得不滾動到左邊看最後一個項目。在更大的屏幕(平板電腦)上顯示所有圖標或項目,而無需滾動。是否有辦法讓所有項目都適合屏幕,而不管屏幕的大小如何。

+0

也許檢查您的應用程序在哪個屏幕上運行,並根據該設置進行佈局。我不知道是否有更好的方法,但可以服務 – Yupi

回答

1

您可以使用您的imageview寬度和高度,邊距等操作。您必須創建上下文,並把它傳遞給你的適配器類的構造函數,因此你可以getResources這樣的:

Context context; 

傳遞給構造函數:

public HorizontalAdapter(Context context, List<Integer> Horizontalicons) { 
    this.Horizontalicons = Horizontalicons; 
    this.context = context; 
} 

比內MyViewHolder你可以做一些事情像這樣:

public MyViewHolder(View view) { 
     super(view); 
     imgIcons = (ImageView) view.findViewById(R.id.imgrecycler); 
     LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)imgIcons.getLayoutParams(); 

    int screenSize = context.getResources().getConfiguration().screenLayout & 
      Configuration.SCREENLAYOUT_SIZE_MASK; 

    switch(screenSize) { 
     case Configuration.SCREENLAYOUT_SIZE_XLARGE: 
     //do stuff 
      break; 

     case Configuration.SCREENLAYOUT_SIZE_LARGE: 
      // do stuff 
      break; 

     case Configuration.SCREENLAYOUT_SIZE_NORMAL: 
     //do stuff 
      break; 

     case Configuration.SCREENLAYOUT_SIZE_SMALL: 
     //for example here 

       lp.height = 20; 
       lp.width = 20; 
       lp.leftMargin = 20; 
       lp.rightMargin = 20; 
       imgIcons.setLayoutParams(lp); 
      break; 

     default: 
     } 
    } 

我用這個模式來設置我的應用程序和cardviews高度的文本大小。

+0

好,所以在這種情況下'do staff'是否在那裏設置適配器? – mcprilla79

+0

您想根據屏幕尺寸設置ImageView的高度和寬度嗎? – Yupi

+0

啊,也喜歡在Instagram的應用程序 – mcprilla79