Created
November 23, 2023 15:45
-
-
Save amoozeshbebin/17242ec225e56aa9952e3b0f5a095175 to your computer and use it in GitHub Desktop.
Language Booster App
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Activity_main.xml: | |
<?xml version="1.0" encoding="utf-8"?> | |
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:app="http://schemas.android.com/apk/res-auto" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
android:background="@color/background" | |
tools:context=".MainActivity"> | |
<TextView | |
android:id="@+id/languageBooster" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginTop="28dp" | |
android:fontFamily="@font/advent_pro_bold" | |
android:text="@string/language_booster" | |
android:textSize="30sp" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toTopOf="parent" /> | |
<soup.neumorphism.NeumorphCardView | |
android:layout_width="0dp" | |
android:layout_height="wrap_content" | |
android:layout_marginTop="20dp" | |
android:padding="20dp" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintHorizontal_bias="0.0" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@+id/languageBooster" | |
app:neumorph_shadowColorDark="@color/dark_shadow" | |
app:neumorph_shadowColorLight="@color/light_shadow" | |
app:neumorph_shapeAppearance="@style/NeumorphismCard"> | |
<androidx.recyclerview.widget.RecyclerView | |
android:id="@+id/main_list" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintHorizontal_bias="1.0" | |
app:layout_constraintStart_toStartOf="parent" /> | |
</soup.neumorphism.NeumorphCardView> | |
<soup.neumorphism.NeumorphFloatingActionButton | |
android:id="@+id/fab" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginEnd="16dp" | |
android:layout_marginBottom="16dp" | |
android:contentDescription="@string/app_name" | |
android:padding="28dp" | |
android:src="@drawable/baseline_add_24" | |
app:layout_constraintBottom_toBottomOf="parent" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:neumorph_shadowColorDark="@color/dark_shadow" | |
app:neumorph_shadowColorLight="@color/light_shadow" | |
app:neumorph_shadowElevation="5dp" | |
app:neumorph_shapeAppearance="@style/NeumorphismCard" | |
tools:ignore="ImageContrastCheck" /> | |
</androidx.constraintlayout.widget.ConstraintLayout> | |
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ | |
MainActivity.kt: | |
package com.iliya.dictianorylanguagebooster | |
import android.annotation.SuppressLint | |
import android.content.Intent | |
import androidx.appcompat.app.AppCompatActivity | |
import android.os.Bundle | |
import androidx.recyclerview.widget.LinearLayoutManager | |
import androidx.recyclerview.widget.RecyclerView | |
import com.google.android.material.floatingactionbutton.FloatingActionButton | |
import soup.neumorphism.NeumorphFloatingActionButton | |
class MainActivity : AppCompatActivity() { | |
private lateinit var recyclerView: RecyclerView | |
private lateinit var fab: NeumorphFloatingActionButton | |
private lateinit var adapter: RecyclerAdapter | |
private lateinit var wordDBHelper: WordDBHelper | |
private val listItems = ArrayList<Word>() | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_main) | |
init() | |
} | |
private fun init() { | |
bindViews() | |
wordDBHelper = WordDBHelper(this) | |
adapter = RecyclerAdapter(this, listItems,wordDBHelper) | |
val layoutManager = LinearLayoutManager(this) | |
recyclerView.layoutManager = layoutManager | |
recyclerView.adapter = adapter | |
fab.setOnClickListener { | |
startActivity(Intent(this, AddWordActivity::class.java)) | |
} | |
} | |
fun bindViews() { | |
recyclerView = findViewById(R.id.main_list) | |
fab = findViewById(R.id.fab) | |
} | |
@SuppressLint("NotifyDataSetChanged") | |
override fun onResume() { | |
super.onResume() | |
listItems.clear() | |
listItems.addAll(wordDBHelper.getAllWords()) | |
adapter.notifyDataSetChanged() | |
} | |
} | |
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ | |
RecyclerAdapter.kt: | |
package com.iliya.dictianorylanguagebooster | |
import android.content.Context | |
import android.provider.UserDictionary.Words | |
import android.view.LayoutInflater | |
import android.view.View | |
import android.view.ViewGroup | |
import android.widget.TextView | |
import androidx.lifecycle.viewmodel.viewModelFactory | |
import androidx.recyclerview.widget.RecyclerView | |
import com.bumptech.glide.Glide | |
import soup.neumorphism.NeumorphImageButton | |
import soup.neumorphism.NeumorphImageView | |
class RecyclerAdapter(private val contex:Context,private val words: ArrayList<Word>,private val wordDBHelper: WordDBHelper) : | |
RecyclerView.Adapter<RecyclerAdapter.wordHolder>() { | |
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): wordHolder { | |
val inflater = LayoutInflater.from(parent.context) | |
.inflate(R.layout.recycler_item_layout, parent, false) | |
return wordHolder(inflater) | |
} | |
override fun onBindViewHolder(holder: wordHolder, position: Int) { | |
val item = words[position] | |
holder.keyword.text = "${item.keyword}:${item.meaning}" | |
changestar(holder, item) | |
if(position == words.size -1 ){ | |
holder.border.visibility =View.GONE | |
} | |
holder.star.setOnClickListener{ | |
item.star = !item.star | |
wordDBHelper.updateWord(item) | |
changestar(holder, item) | |
} | |
Glide | |
.with(contex) | |
.load("https://picsum.photos/70?rand="+System.currentTimeMillis()) | |
.centerCrop() | |
.placeholder(R.drawable.rwerwe) | |
.into(holder.img); | |
} | |
private fun changestar( | |
holder: wordHolder, | |
item: Word | |
) { | |
holder.star.setImageResource( | |
if (item.star) R.drawable.baseline_star_24 | |
else R.drawable.baseline_star_border_24 | |
) | |
} | |
override fun getItemCount(): Int { | |
return words.size | |
} | |
class wordHolder(v: View) : RecyclerView.ViewHolder(v), View.OnClickListener { | |
var keyword: TextView = v.findViewById(R.id.text_view) | |
var star: NeumorphImageButton = v.findViewById(R.id.starbtn) | |
var img: NeumorphImageView = v.findViewById(R.id.img) | |
var border: View = v.findViewById(R.id.border) | |
override fun onClick(v: View?) { | |
TODO("Not yet implemented") | |
} | |
} | |
} | |
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ | |
WordDBHelper.kt: | |
package com.iliya.dictianorylanguagebooster | |
import android.annotation.SuppressLint | |
import android.content.ContentValues | |
import android.content.Context | |
import android.database.Cursor | |
import android.database.sqlite.SQLiteDatabase | |
import android.database.sqlite.SQLiteOpenHelper | |
import java.lang.Exception | |
class WordDBHelper(context: Context) : | |
SQLiteOpenHelper(context, database_name, null, database_version) { | |
override fun onCreate(db: SQLiteDatabase?) { | |
db?.execSQL(SQL_CREATE_QUERY) | |
} | |
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) { | |
db?.execSQL(SQL_DELETE_QUERY) | |
onCreate(db) | |
} | |
fun insertWord(word: Word): Boolean { | |
return try { | |
val db = writableDatabase | |
val valuse = ContentValues() | |
valuse.put(DBContract.WordEntity.COLUMN_KEYWORD, word.keyword) | |
valuse.put(DBContract.WordEntity.COLUMN_MEANING, word.meaning) | |
valuse.put(DBContract.WordEntity.COLUMN_STAR, if (word.star) 1 else 0) | |
db.insert(DBContract.WordEntity.TABLE_NAME, null, valuse) | |
true | |
} catch (e: Exception) { | |
false | |
} | |
} | |
@SuppressLint("Range") | |
fun getAllWords(): ArrayList<Word> { | |
val words = ArrayList<Word>() | |
val db = readableDatabase | |
var cursor: Cursor? = null | |
try { | |
cursor = db.rawQuery("SELECT * FROM ${DBContract.WordEntity.TABLE_NAME}", null) | |
} catch (e: Exception) { | |
db.execSQL(SQL_CREATE_QUERY) | |
return ArrayList() | |
} | |
var keyword: String | |
var meaning: String | |
var stared: Boolean | |
if (cursor.moveToFirst()) { | |
while (!cursor.isAfterLast) { | |
keyword = | |
cursor.getString(cursor.getColumnIndex(DBContract.WordEntity.COLUMN_KEYWORD)) | |
meaning = | |
cursor.getString(cursor.getColumnIndex(DBContract.WordEntity.COLUMN_MEANING)) | |
stared = | |
cursor.getInt(cursor.getColumnIndex(DBContract.WordEntity.COLUMN_STAR)) == 1 | |
words.add(Word(keyword, meaning, stared)) | |
cursor.moveToNext() | |
} | |
} | |
return words | |
} | |
fun updateWord(word: Word): Boolean { | |
return try { | |
val db = writableDatabase | |
val valuse = ContentValues() | |
valuse.put(DBContract.WordEntity.COLUMN_MEANING, word.meaning) | |
valuse.put(DBContract.WordEntity.COLUMN_STAR, if (word.star) 1 else 0) | |
val where = "${DBContract.WordEntity.COLUMN_KEYWORD} = ?" | |
val args = arrayOf(word.keyword) | |
db.update(DBContract.WordEntity.TABLE_NAME, valuse, where, args) | |
true | |
} catch (e: Exception) { | |
false | |
} | |
} | |
companion object { | |
const val database_version = 1 | |
const val database_name = "LanguageBooster.db" | |
private val SQL_CREATE_QUERY = "CREATE TABLE ${DBContract.WordEntity.TABLE_NAME}" + | |
" (${DBContract.WordEntity.COLUMN_KEYWORD} TEXT PRIMARY KEY," + | |
" ${DBContract.WordEntity.COLUMN_MEANING} TEXT ," + | |
" ${DBContract.WordEntity.COLUMN_STAR} NUMERIC)" | |
private val SQL_DELETE_QUERY = "DROP TABLE IF EXISTS ${DBContract.WordEntity.TABLE_NAME}" | |
} | |
} | |
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ | |
DBContract.object: | |
package com.iliya.dictianorylanguagebooster | |
import android.provider.BaseColumns | |
object DBContract { | |
class WordEntity : BaseColumns { | |
companion object{ | |
val TABLE_NAME = "words" | |
val COLUMN_KEYWORD = "keyword" | |
val COLUMN_MEANING = "meaning" | |
val COLUMN_STAR = "star" | |
} | |
} | |
} | |
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ | |
Word.kt: | |
package com.iliya.dictianorylanguagebooster | |
data class Word( | |
var keyword: String, | |
var meaning: String, | |
var star: Boolean | |
) | |
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ | |
recycler_item_layout.xml: | |
<?xml version="1.0" encoding="utf-8"?> | |
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:app="http://schemas.android.com/apk/res-auto" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:orientation="horizontal" | |
android:paddingLeft="8dp" | |
android:paddingTop="3dp" | |
android:paddingRight="8dp" | |
android:paddingBottom="3dp"> | |
<soup.neumorphism.NeumorphCardView | |
android:id="@+id/imgHolder" | |
android:layout_width="70dp" | |
android:layout_height="70dp" | |
app:layout_constraintBottom_toBottomOf="parent" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toTopOf="parent" | |
app:neumorph_shadowColorDark="@color/dark_shadow" | |
app:neumorph_shadowColorLight="@color/light_shadow" | |
app:neumorph_shadowElevation="4dp" | |
app:neumorph_shapeAppearance="@style/NeumorphismCard" | |
app:neumorph_shapeType="flat"> | |
<soup.neumorphism.NeumorphImageView | |
android:id="@+id/img" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" /> | |
</soup.neumorphism.NeumorphCardView> | |
<TextView | |
android:id="@+id/text_view" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginStart="84dp" | |
android:layout_marginTop="20dp" | |
android:fontFamily="@font/iransans" | |
android:text="@string/text_view" | |
android:textSize="20sp" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toTopOf="parent" /> | |
<soup.neumorphism.NeumorphImageButton | |
android:id="@+id/starbtn" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginEnd="4dp" | |
android:background="@color/background" | |
android:contentDescription="@string/imagebottom" | |
android:padding="18dp" | |
android:src="@drawable/baseline_star_border_24" | |
app:layout_constraintBottom_toBottomOf="parent" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintTop_toTopOf="parent" | |
app:layout_constraintVertical_bias="0.576" | |
app:neumorph_shadowColorDark="@color/dark_shadow" | |
app:neumorph_shadowColorLight="@color/light_shadow" | |
app:neumorph_shadowElevation="5dp" | |
app:neumorph_shapeAppearance="@style/NeumorphismCard" | |
app:neumorph_shapeType="basin" | |
tools:ignore="ImageContrastCheck" /> | |
<View | |
android:id="@+id/border" | |
android:layout_width="match_parent" | |
android:layout_height="1dp" | |
android:background="@color/dark_shadow" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@id/imgHolder" /> | |
</androidx.constraintlayout.widget.ConstraintLayout> | |
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ | |
activity_splash_screen.xml: | |
<?xml version="1.0" encoding="utf-8"?> | |
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:app="http://schemas.android.com/apk/res-auto" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
tools:context=".splashscreen"> | |
<soup.neumorphism.NeumorphImageButton | |
android:id="@+id/starbtn" | |
android:layout_width="94dp" | |
android:layout_height="97dp" | |
android:layout_marginTop="240dp" | |
android:background="@color/background" | |
android:contentDescription="@string/imagebottom" | |
android:padding="18dp" | |
android:src="@drawable/logo2" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintHorizontal_bias="0.498" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toTopOf="parent" | |
app:neumorph_shadowColorDark="@color/dark_shadow" | |
app:neumorph_shadowColorLight="@color/light_shadow" | |
app:neumorph_shadowElevation="5dp" | |
app:neumorph_shapeAppearance="@style/NeumorphismCard" | |
app:neumorph_shapeType="basin" | |
tools:ignore="ImageContrastCheck" /> | |
<ProgressBar | |
android:id="@+id/progressBar" | |
style="?android:attr/progressBarStyle" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginTop="68dp" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintHorizontal_bias="0.498" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@+id/starbtn" /> | |
</androidx.constraintlayout.widget.ConstraintLayout> | |
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ | |
splashscreen.kt: | |
package com.iliya.dictianorylanguagebooster | |
import android.content.Intent | |
import androidx.appcompat.app.AppCompatActivity | |
import android.os.Bundle | |
import android.os.Handler | |
import android.os.Looper | |
class splashscreen : AppCompatActivity() { | |
val waitsecount:Long = 500 | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_splashscreen) | |
Handler(Looper.getMainLooper()).postDelayed({ | |
val intent = Intent(this,MainActivity::class.java) | |
startActivity(intent) | |
finish() | |
},waitsecount) | |
} | |
} | |
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ | |
AddWordactivity.kt: | |
package com.iliya.dictianorylanguagebooster | |
import androidx.appcompat.app.AppCompatActivity | |
import android.os.Bundle | |
import android.widget.Button | |
import android.widget.EditText | |
import android.widget.Toast | |
class AddWordActivity : AppCompatActivity() { | |
private lateinit var keyword:EditText | |
private lateinit var meaning:EditText | |
private lateinit var btn_add_word:Button | |
private lateinit var wordDBHelper:WordDBHelper | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_add_word) | |
init() | |
} | |
private fun init(){ | |
bindViews() | |
wordDBHelper = WordDBHelper(this) | |
btn_add_word.setOnClickListener { | |
if(keyword.text.isEmpty()){ | |
Toast.makeText(this,"Please Enter Word",Toast.LENGTH_SHORT).show() | |
return@setOnClickListener | |
} | |
if(meaning.text.isEmpty()){ | |
Toast.makeText(this,"Please Enter Meaning",Toast.LENGTH_SHORT).show() | |
return@setOnClickListener | |
} | |
val word = Word(keyword.text.toString(),meaning.text.toString(),false) | |
val result = wordDBHelper.insertWord(word) | |
if(result){ | |
Toast.makeText(this,"New Word Added",Toast.LENGTH_SHORT).show() | |
finish() | |
}else{ | |
Toast.makeText(this,"Error on adding New Word!!",Toast.LENGTH_SHORT).show() | |
} | |
} | |
} | |
fun bindViews(){ | |
keyword = findViewById(R.id.edittextword) | |
meaning = findViewById(R.id.edittextmeaning) | |
btn_add_word = findViewById(R.id.btn_add_word) | |
} | |
} | |
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ | |
activity_add_word.xml: | |
<?xml version="1.0" encoding="utf-8"?> | |
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:app="http://schemas.android.com/apk/res-auto" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
tools:context=".AddWordActivity"> | |
<soup.neumorphism.NeumorphCardView | |
android:id="@+id/neumorphCardView" | |
android:layout_width="260dp" | |
android:layout_height="175dp" | |
android:layout_marginTop="92dp" | |
android:padding="20dp" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintHorizontal_bias="0.485" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toTopOf="parent" | |
app:neumorph_shadowColorDark="@color/dark_shadow" | |
app:neumorph_shadowColorLight="@color/light_shadow" | |
app:neumorph_shapeAppearance="@style/NeumorphismCard"> | |
<EditText | |
android:id="@+id/edittextword" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginTop="15dp" | |
android:autofillHints="" | |
android:ems="10" | |
android:hint="@string/word" | |
android:inputType="text" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintHorizontal_bias="0.384" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@+id/textView" | |
tools:ignore="LabelFor,TouchTargetSizeCheck" /> | |
<EditText | |
android:id="@+id/edittextmeaning" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginTop="70dp" | |
android:ems="10" | |
android:hint="@string/meaning" | |
android:inputType="text" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintHorizontal_bias="0.41" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@+id/textView" | |
tools:ignore="Autofill,LabelFor,TouchTargetSizeCheck" /> | |
</soup.neumorphism.NeumorphCardView> | |
<TextView | |
android:id="@+id/textView" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginTop="36dp" | |
android:fontFamily="@font/advent_pro_bold" | |
android:text="@string/add_new_word_to_your_dictionary" | |
android:textSize="20sp" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintHorizontal_bias="0.496" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toTopOf="parent" /> | |
<soup.neumorphism.NeumorphButton | |
android:id="@+id/btn_add_word" | |
android:layout_width="122dp" | |
android:layout_height="81dp" | |
android:layout_marginTop="36dp" | |
android:gravity="center" | |
android:padding="20dp" | |
android:text="@string/add_word" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintHorizontal_bias="0.463" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@+id/neumorphCardView" | |
app:neumorph_shadowColorDark="@color/dark_shadow" | |
app:neumorph_shadowColorLight="@color/light_shadow" | |
app:neumorph_shadowElevation="5dp" | |
app:neumorph_shapeAppearance="@style/NeumorphismCard"> | |
</soup.neumorphism.NeumorphButton> | |
</androidx.constraintlayout.widget.ConstraintLayout> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment