Skip to content

Commit 9214f74

Browse files
committed
Add example about how to create Custom CodeView adapter for the auto complete feature
1 parent 1ebab72 commit 9214f74

7 files changed

Lines changed: 143 additions & 13 deletions

File tree

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.amrdeveloper.codeviewlibrary;
2+
3+
import android.content.Context;
4+
import android.view.LayoutInflater;
5+
import android.view.View;
6+
import android.view.ViewGroup;
7+
import android.widget.ImageView;
8+
import android.widget.TextView;
9+
10+
import androidx.annotation.NonNull;
11+
12+
import com.amrdeveloper.codeview.Code;
13+
import com.amrdeveloper.codeview.CodeViewAdapter;
14+
import com.amrdeveloper.codeview.Snippet;
15+
16+
import java.util.List;
17+
18+
public class CustomCodeViewAdapter extends CodeViewAdapter {
19+
20+
private final LayoutInflater layoutInflater;
21+
22+
public CustomCodeViewAdapter(@NonNull Context context, @NonNull List<Code> codes) {
23+
super(context, R.layout.list_item_modern_autocomplete, 0, codes);
24+
this.layoutInflater = LayoutInflater.from(context);
25+
}
26+
27+
@Override
28+
public View getView(int position, View convertView, ViewGroup parent) {
29+
if (convertView == null) {
30+
convertView = layoutInflater.inflate(R.layout.list_item_modern_autocomplete, parent, false);
31+
}
32+
33+
ImageView codeType = convertView.findViewById(R.id.code_type);
34+
TextView codeTitle = convertView.findViewById(R.id.code_title);
35+
Code currentCode = (Code) getItem(position);
36+
if (currentCode != null) {
37+
codeTitle.setText(currentCode.getCodeTitle());
38+
if (currentCode instanceof Snippet) {
39+
codeType.setImageResource(R.drawable.ic_snippet);
40+
} else {
41+
codeType.setImageResource(R.drawable.ic_keyword);
42+
}
43+
}
44+
45+
return convertView;
46+
}
47+
}

app/src/main/java/com/amrdeveloper/codeviewlibrary/MainActivity.java

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,17 @@
1515
import android.widget.EditText;
1616
import android.widget.ImageButton;
1717

18+
import com.amrdeveloper.codeview.Code;
1819
import com.amrdeveloper.codeview.CodeView;
20+
import com.amrdeveloper.codeview.Keyword;
1921
import com.amrdeveloper.codeviewlibrary.syntax.Theme;
2022
import com.amrdeveloper.codeviewlibrary.syntax.Language;
2123
import com.amrdeveloper.codeviewlibrary.syntax.SyntaxManager;
2224
import com.google.android.material.bottomsheet.BottomSheetDialog;
2325

26+
import java.util.ArrayList;
2427
import java.util.HashSet;
28+
import java.util.List;
2529
import java.util.Set;
2630

2731
public class MainActivity extends AppCompatActivity {
@@ -32,6 +36,8 @@ public class MainActivity extends AppCompatActivity {
3236
private Language currentLanguage = Language.JAVA;
3337
private Theme currentTheme = Theme.MONOKAI;
3438

39+
private final boolean useModernAutoCompleteAdapter = true;
40+
3541
@Override
3642
protected void onCreate(Bundle savedInstanceState) {
3743
super.onCreate(savedInstanceState);
@@ -86,15 +92,25 @@ private void configLanguageAutoComplete() {
8692
break;
8793
}
8894

89-
// Custom list item xml layout
90-
final int layoutId = R.layout.suggestion_list_item;
91-
92-
// TextView id to put suggestion on it
93-
final int viewId = R.id.suggestItemTextView;
94-
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, layoutId, viewId, languageKeywords);
95-
96-
// Add Custom Adapter to the CodeView
97-
codeView.setAdapter(adapter);
95+
if (useModernAutoCompleteAdapter) {
96+
final List<Code> codeList = new ArrayList<>();
97+
for (String keyword : languageKeywords) {
98+
codeList.add(new Keyword(keyword, keyword));
99+
}
100+
// Here you can add snippets to the codeList
101+
CustomCodeViewAdapter adapter = new CustomCodeViewAdapter(this, codeList);
102+
codeView.setAdapter(adapter);
103+
} else {
104+
// Custom list item xml layout
105+
final int layoutId = R.layout.list_item_suggestion;
106+
107+
// TextView id to put suggestion on it
108+
final int viewId = R.id.suggestItemTextView;
109+
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, layoutId, viewId, languageKeywords);
110+
111+
// Add Custom Adapter to the CodeView
112+
codeView.setAdapter(adapter);
113+
}
98114
}
99115

100116
@Override
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="25dp"
3+
android:height="25dp"
4+
android:viewportWidth="25"
5+
android:viewportHeight="25">
6+
<path
7+
android:pathData="M12.5,12.5m-12.5,0a12.5,12.5 0,1 1,25 0a12.5,12.5 0,1 1,-25 0"
8+
android:fillColor="#89D0E9"/>
9+
<path
10+
android:pathData="M11.972,13.052L10.256,14.792V17H9.368V8.6H10.256V13.676L15.188,8.6H16.208L12.572,12.404L16.46,17H15.404L11.972,13.052Z"
11+
android:fillColor="#486069"/>
12+
</vector>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="25dp"
3+
android:height="25dp"
4+
android:viewportWidth="25"
5+
android:viewportHeight="25">
6+
<path
7+
android:pathData="M12.5,12.5m-12.5,0a12.5,12.5 0,1 1,25 0a12.5,12.5 0,1 1,-25 0"
8+
android:fillColor="#F8B6C2"/>
9+
<path
10+
android:pathData="M12.684,17.072C12.06,17.072 11.46,16.972 10.884,16.772C10.316,16.572 9.876,16.308 9.564,15.98L9.912,15.296C10.216,15.6 10.62,15.848 11.124,16.04C11.628,16.224 12.148,16.316 12.684,16.316C13.436,16.316 14,16.18 14.376,15.908C14.752,15.628 14.94,15.268 14.94,14.828C14.94,14.492 14.836,14.224 14.628,14.024C14.428,13.824 14.18,13.672 13.884,13.568C13.588,13.456 13.176,13.336 12.648,13.208C12.016,13.048 11.512,12.896 11.136,12.752C10.76,12.6 10.436,12.372 10.164,12.068C9.9,11.764 9.768,11.352 9.768,10.832C9.768,10.408 9.88,10.024 10.104,9.68C10.328,9.328 10.672,9.048 11.136,8.84C11.6,8.632 12.176,8.528 12.864,8.528C13.344,8.528 13.812,8.596 14.268,8.732C14.732,8.86 15.132,9.04 15.468,9.272L15.168,9.98C14.816,9.748 14.44,9.576 14.04,9.464C13.64,9.344 13.248,9.284 12.864,9.284C12.128,9.284 11.572,9.428 11.196,9.716C10.828,9.996 10.644,10.36 10.644,10.808C10.644,11.144 10.744,11.416 10.944,11.624C11.152,11.824 11.408,11.98 11.712,12.092C12.024,12.196 12.44,12.312 12.96,12.44C13.576,12.592 14.072,12.744 14.448,12.896C14.832,13.04 15.156,13.264 15.42,13.568C15.684,13.864 15.816,14.268 15.816,14.78C15.816,15.204 15.7,15.592 15.468,15.944C15.244,16.288 14.896,16.564 14.424,16.772C13.952,16.972 13.372,17.072 12.684,17.072Z"
11+
android:fillColor="#486069"/>
12+
</vector>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
4+
android:layout_width="wrap_content"
5+
android:layout_height="wrap_content"
6+
android:background="@color/orange_box_black">
7+
8+
<RelativeLayout
9+
android:id="@+id/code_container"
10+
android:layout_width="@dimen/dimen40dp"
11+
android:layout_height="@dimen/dimen50dp">
12+
13+
<ImageView
14+
android:id="@+id/code_type"
15+
android:layout_width="@dimen/dimen25dp"
16+
android:layout_height="@dimen/dimen25dp"
17+
android:layout_centerHorizontal="true"
18+
android:layout_centerVertical="true"
19+
android:src="@drawable/ic_keyword"
20+
android:textColor="@color/white"
21+
android:textSize="@dimen/dimen20sp"
22+
android:textStyle="bold"
23+
tools:text="K" />
24+
</RelativeLayout>
25+
26+
<TextView
27+
android:id="@+id/code_title"
28+
android:layout_width="match_parent"
29+
android:layout_height="@dimen/dimen40dp"
30+
android:layout_toEndOf="@id/code_container"
31+
android:layout_toRightOf="@id/code_container"
32+
android:gravity="start|center_vertical"
33+
android:paddingStart="@dimen/dimen5dp"
34+
android:paddingLeft="@dimen/dimen5dp"
35+
android:textColor="@color/white"
36+
tools:ignore="RtlSymmetry"
37+
tools:text="Keyword" />
38+
</RelativeLayout>
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<LinearLayout
3-
xmlns:android="http://schemas.android.com/apk/res/android"
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
44
android:layout_width="match_parent"
55
android:layout_height="wrap_content">
66

77
<TextView
88
android:id="@+id/suggestItemTextView"
99
android:layout_width="match_parent"
1010
android:layout_height="wrap_content"
11+
android:background="@color/black"
1112
android:padding="@dimen/dimen20dp"
1213
android:textColor="@color/orange"
13-
android:background="@color/black"
14-
android:textSize="@dimen/dimen15sp" />
14+
android:textSize="@dimen/dimen15sp"
15+
tools:text="Keyword" />
1516
</LinearLayout>

app/src/main/res/values/dimens.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@
44
<dimen name="dimen5dp">5dp</dimen>
55
<dimen name="dimen10dp">10dp</dimen>
66
<dimen name="dimen20dp">20dp</dimen>
7+
<dimen name="dimen25dp">25dp</dimen>
8+
<dimen name="dimen40dp">40dp</dimen>
79
<dimen name="dimen45dp">45dp</dimen>
10+
<dimen name="dimen50dp">50dp</dimen>
811
<dimen name="dimen150dp">150dp</dimen>
912

1013
<!--SP-->
1114
<dimen name="dimen15sp">15sp</dimen>
15+
<dimen name="dimen20sp">20sp</dimen>
1216
</resources>

0 commit comments

Comments
 (0)