2017-03-07 9 views
0

클라이언트 용 사용자 지정 이모티콘 키보드를 만들고 있습니다. 우리는 이미 iOS 앱을 가지고 있으며 이제는 Android와 비슷한 것을 만들려고합니다. iOS의 UICollectionView와 다소 비슷한 gridView를 사용하고 있습니다. 하지만 단순히 gridView의 높이를 설정할 수없는 이유를 이해하지 못합니다. 내가 원하는 것은 시스템 키보드와 같은 특정 키보드 높이를 설정하는 것입니다. 따라서 8-10 개의 이미지 만 나타나고 나머지는 스크롤 할 수 있습니다. 페이징 및 가로 스크롤링을 추가하는 것이 보너스이자 마지막 단계입니다. 여기 안드로이드는 사용자 정의 키보드에서 고정 GridView 높이를 설정합니다

키보드에 대한 내 XML 파일입니다

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/keyboardView" 
    android:layout_width="match_parent" 
    android:layout_height="240dp" 
    android:background="@android:color/white" 
    android:orientation="horizontal"> 

    <GridView 
     android:id="@+id/imageGridView" 
     android:layout_width="match_parent" 
     android:layout_height="240dp" 
     android:columnWidth="90dp" 
     android:gravity="center" 
     android:horizontalSpacing="10dp" 
     android:numColumns="auto_fit" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="10dp" /> 

</LinearLayout> 

내 InputServiceManagers onCreateInputView :

public View onCreateInputView() { 

     keyboardView = getLayoutInflater().inflate(R.layout.keyboard,null); 

     List<Integer> imageArray = new ArrayList<>(); 
     for (int i = 1; i <= 20;i++){ 
      try { 
       Class res = R.drawable.class; 
       String imageName = "sticker" + String.valueOf(i); 
       Field field = res.getField(imageName); 
       int drawableID = field.getInt(null); 
       imageArray.add(drawableID); 
      } catch (Exception e) { 
       Log.e("MyTag","Failure to get drawable id.",e); 
      } 
     } 

     imageGrid = (GridView) keyboardView.findViewById(R.id.imageGridView); 
     imageGrid.setNumColumns(4); 
     ImageGridAdapter adapter = new ImageGridAdapter(this); 
     adapter.imageArray = imageArray; 
     imageGrid.setAdapter(adapter); 


     return keyboardView; 

    } 

GridViewAdapter :

public class ImageGridAdapter extends BaseAdapter { 

    private Context mContext; 
    public List<Integer> imageArray; 

    public ImageGridAdapter(Context c) { 
     mContext = c; 
    } 

    public int getCount() { 
     return imageArray.size(); 
    } 

    public Object getItem(int position) { 
     return imageArray.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(120, 120)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      //imageView.setPadding(1, 1, 1, 1); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setImageResource(imageArray.get(position)); 
     return imageView; 
    } 


} 

이 최종 제품의 모양 방법입니다 : enter image description here

012 3,516,

는 그리고 이것은 지금 모습입니다 : enter image description here

+0

표시하지 않은 코드의 일부로 의심되는 부분이 있습니다. 레이아웃 파일을 부 풀리면 높이가 240dp가되지만 화면 상단에 나타납니다. keyboard.xml의 부모를 보라. – Gary99

답변

1

나는 코드를 사용하며, 스티커는 스크롤과 키보드 영역에 표시되어 잘 작동합니다. 현재 비슷한 프로젝트를 진행하고 있습니다. 원하는 경우 서로 도울 수 있다고 생각합니다.

Androi Emoji Keyboard

+0

감사합니다. 솔루션을 찾았습니다. :) – user3621033

+0

이메일 : [email protected] – user3621033

+0

안녕하세요 @ user3621033, 내가 너와 같은 프로젝트를 개발 중이고 코드를 나에게 알려주시겠습니까? 내 코드에 오류가 있습니다. 감사 –