2017-04-23 52 views
0

我想通过使用Recyclerview和GridlayoutManager列出颜色使颜色选择器应用程序。我使用ImageButton来呈现颜色。有两个recyclerviews,第一个显示我制作的主要颜色,第二个显示第一个选定颜色的色调和阴影。我的代码很难看,但这是用于实验的,所以现在我只想让gridlayoutmanager的第二个recyclerview成为两行四列。我可以使用下面的代码,但它只显示前4种颜色,而其他颜色我必须向下滚动视图。 enter image description hereAndroid Recyclerview GridLayoutManager当行给定布局不包装其内容

enter image description here

MainActivity:

package tr.com.beyes.colorpicker; 

import android.content.res.Resources; 
import android.graphics.Color; 
import android.support.v4.content.res.TypedArrayUtils; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.GridLayoutManager; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.View; 
import android.widget.Toast; 

import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Resources r=getResources(); 
     int[] fontColors = r.getIntArray(R.array.fontcolors); 


     RecyclerView recyclerView = (RecyclerView) findViewById(R.id.fontColorView); 
     GridLayoutManager gridLayoutManager = new GridLayoutManager(this,11, GridLayoutManager.VERTICAL, true); 
     recyclerView.setLayoutManager(gridLayoutManager); 


     RecyclerView recyclerView2 = (RecyclerView) findViewById(R.id.fontColorViewSub); 
     GridLayoutManager gridLayoutManager2 = new GridLayoutManager(this,4); 
     recyclerView2.setLayoutManager(gridLayoutManager2); 

     int[] tint = new int[8]; 
     tint[0]=(Color.rgb(0,0,0)); 
     int red = Color.red(fontColors[0]); 
     int green = Color.green(fontColors[0]); 
     int blue = Color.blue(fontColors[0]); 
     for(int i=1; i<7;i++){ 
      red = (int) (red + (255-red) * 0.25); 
      green = (int) (green + (255-green) * 0.25); 
      blue = (int) (blue + (255-blue) * 0.25); 
      tint[i]=(Color.rgb(red,green,blue)); 
     } 
     tint[7]=(Color.rgb(255,255,255)); 
     ColorPickerAdapter colorPickerAdapter2 = new ColorPickerAdapter(tint,this, null); 
     recyclerView2.setAdapter(colorPickerAdapter2); 

     ColorPickerAdapter colorPickerAdapter = new ColorPickerAdapter(fontColors,this,colorPickerAdapter2); 
     recyclerView.setAdapter(colorPickerAdapter); 


    } 
} 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     tools:context="tr.com.beyes.colorpicker.MainActivity" 
     android:orientation="vertical"> 


     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/fontColorView" 
      > 

     </android.support.v7.widget.RecyclerView> 

     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/fontColorViewSub" 
      android:layout_marginTop="20dp" 
      > 

     </android.support.v7.widget.RecyclerView> 



    </LinearLayout> 

colorbox.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageButton 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:minHeight="24dp" 
     android:id="@+id/fontColorBox" 
     android:clickable="true" 
     /> 

</LinearLayout> 

回答

0

1.使用setHasFixedSize(true)recyclerViewrecyclerView2

2.更新如下gridLayoutManager2参数:

GridLayoutManager gridLayoutManager2 = new GridLayoutManager(this, 4, GridLayoutManager.VERTICAL, true); 

使用NestedScrollView为您LinearLayout的容器。

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="tr.com.beyes.colorpicker.MainActivity"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     android:orientation="vertical"> 

     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/fontColorView" /> 

     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/fontColorViewSub" 
      android:layout_marginTop="20dp" /> 

    </LinearLayout> 
</android.support.v4.widget.NestedScrollView> 

希望这将工作〜

+1

没有工作。它看起来是一样的,但唯一不同的这段时间是图开始向下滚动到第二排。我想同时显示2行而不滚动 – Tom

+0

setHasFixedSize(true)to recyclerviews。检查我更新的答案 – FAT

+0

我也这样做了..同样:( – Tom

相关问题