클라이언트 용 사용자 지정 이모티콘 키보드를 만들고 있습니다. 우리는 이미 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;
}
}
012 3,516,
표시하지 않은 코드의 일부로 의심되는 부분이 있습니다. 레이아웃 파일을 부 풀리면 높이가 240dp가되지만 화면 상단에 나타납니다. keyboard.xml의 부모를 보라. – Gary99