First working viewgroup

This commit is contained in:
leca 2024-09-29 03:35:34 +03:00
parent 0a035d9399
commit 9ea70a30d8
4 changed files with 29 additions and 195 deletions

View File

@ -2,202 +2,38 @@ package org.foxarmy.barcodescannerforemployees
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.core.net.toFile
import org.foxarmy.barcodescannerforemployees.databinding.AbstractProductViewBinding
import org.foxarmy.barcodescannerforemployees.databinding.AddProductFragmentBinding
import java.io.File import java.io.File
class AbstractProductView: LinearLayout { class AbstractProductView: LinearLayout {
private var _binding: AbstractProductViewBinding? = null private var productPicture: ImageView
private val productImage = ImageView(context) private var productNameField: TextView
private val productNameField = TextView(context) private var netWeightField: TextView
private val netWeightField = TextView(context) private var categoryField: TextView
private val categoryField = TextView(context) private var unitField: TextView
fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = AbstractProductViewBinding.inflate(inflater, container, false)
}
constructor(activity: Activity, context: Context, productImageFile: String, productName: String, netWeight: Double, category: Int) : super(context) { constructor(activity: Activity, context: Context, productImageFile: String, productName: String, netWeight: Double, category: Int) : super(context) {
this.orientation = VERTICAL
val inflater:LayoutInflater = activity.layoutInflater
inflater.inflate(R.layout.abstract_product_view, this)
productPicture = findViewById(R.id.productPicture)
productNameField = findViewById(R.id.productNameView)
netWeightField = findViewById(R.id.productNetWeightView)
categoryField = findViewById(R.id.categoryView)
unitField = findViewById(R.id.unitView)
val picturesDir = File(context.filesDir, "pictures") val picturesDir = File(context.filesDir, "pictures")
picturesDir.mkdirs() picturesDir.mkdirs()
val imageUri = getImageUri(activity, File(picturesDir, productImageFile)) val imageUri = getImageUri(activity, File(picturesDir, productImageFile))
if (imageUri != null) {
Log.d("QWERTYUIOP", "хуй: ${imageUri.path.toString()}") productPicture.setImageURI(imageUri)
try {
Log.d("QWERTYUIOP", "Does exist: ${imageUri.toFile().absolutePath}")
} catch (e:Exception) {
Log.d("QWERTYUIOP", e.message.toString())
}
}
productImage.setImageURI(imageUri)
productNameField.text = productName productNameField.text = productName
netWeightField.text = netWeight.toString() netWeightField.text = netWeight.toString()
//TODO: category and units
addView(productNameField)
addView(netWeightField)
// if(findViewById(R.id.productLayout) == null) {
// Toast.makeText(context, "AAAAAAAAAAA", Toast.LENGTH_LONG).show()
// }
// findViewById<ConstraintLayout>(R.id.productLayout).addView(productNameField)
// (requestLayout() as RelativeLayout).addView(productNameField)
} }
} }
//class AbstractProductView : View {
//
// private var _exampleString: String? = null // TODO: use a default from R.string...
// private var _exampleColor: Int = Color.RED // TODO: use a default from R.color...
// private var _exampleDimension: Float = 0f // TODO: use a default from R.dimen...
//
// private lateinit var textPaint: TextPaint
// private var textWidth: Float = 0f
// private var textHeight: Float = 0f
//
// /**
// * The text to draw
// */
// var exampleString: String?
// get() = _exampleString
// set(value) {
// _exampleString = value
// invalidateTextPaintAndMeasurements()
// }
//
// /**
// * The font color
// */
// var exampleColor: Int
// get() = _exampleColor
// set(value) {
// _exampleColor = value
// invalidateTextPaintAndMeasurements()
// }
//
// /**
// * In the example view, this dimension is the font size.
// */
// var exampleDimension: Float
// get() = _exampleDimension
// set(value) {
// _exampleDimension = value
// invalidateTextPaintAndMeasurements()
// }
//
// /**
// * In the example view, this drawable is drawn above the text.
// */
// var exampleDrawable: Drawable? = null
//
// constructor(context: Context) : super(context) {
// init(null, 0)
// }
//
// constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
// init(attrs, 0)
// }
//
// constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) {
// init(attrs, defStyle)
// }
//
// private fun init(attrs: AttributeSet?, defStyle: Int) {
// // Load attributes
// val a = context.obtainStyledAttributes(
// attrs, R.styleable.AbstractProductView, defStyle, 0
// )
//
// _exampleString = a.getString(
// R.styleable.AbstractProductView_exampleString
// )
// _exampleColor = a.getColor(
// R.styleable.AbstractProductView_exampleColor,
// exampleColor
// )
// // Use getDimensionPixelSize or getDimensionPixelOffset when dealing with
// // values that should fall on pixel boundaries.
// _exampleDimension = a.getDimension(
// R.styleable.AbstractProductView_exampleDimension,
// exampleDimension
// )
//
// if (a.hasValue(R.styleable.AbstractProductView_exampleDrawable)) {
// exampleDrawable = a.getDrawable(
// R.styleable.AbstractProductView_exampleDrawable
// )
// exampleDrawable?.callback = this
// }
//
// a.recycle()
//
// // Set up a default TextPaint object
// textPaint = TextPaint().apply {
// flags = Paint.ANTI_ALIAS_FLAG
// textAlign = Paint.Align.LEFT
// }
//
// // Update TextPaint and text measurements from attributes
// invalidateTextPaintAndMeasurements()
// }
//
// private fun invalidateTextPaintAndMeasurements() {
// textPaint.let {
// it.textSize = exampleDimension
// it.color = exampleColor
// textWidth = it.measureText(exampleString)
// textHeight = it.fontMetrics.bottom
// }
// }
//
// override fun onDraw(canvas: Canvas) {
// super.onDraw(canvas)
//
// // TODO: consider storing these as member variables to reduce
// // allocations per draw cycle.
// val paddingLeft = paddingLeft
// val paddingTop = paddingTop
// val paddingRight = paddingRight
// val paddingBottom = paddingBottom
//
// val contentWidth = width - paddingLeft - paddingRight
// val contentHeight = height - paddingTop - paddingBottom
//
// exampleString?.let {
// // Draw the text.
// canvas.drawText(
// it,
// paddingLeft + (contentWidth - textWidth) / 2,
// paddingTop + (contentHeight + textHeight) / 2,
// textPaint
// )
// }
//
// // Draw the example drawable on top of the text.
// exampleDrawable?.let {
// it.setBounds(
// paddingLeft, paddingTop,
// paddingLeft + contentWidth, paddingTop + contentHeight
// )
// it.draw(canvas)
// }
// }
//}

View File

@ -34,7 +34,7 @@ class StorageFragment : Fragment() {
val projection = arrayOf(BaseColumns._ID, ProductContract.ProductEntry.PRODUCT_NAME, ProductContract.ProductEntry.PRODUCT_NET_WEIGHT, ProductContract.ProductEntry.IMAGE_FILENAME) val projection = arrayOf(BaseColumns._ID, ProductContract.ProductEntry.PRODUCT_NAME, ProductContract.ProductEntry.PRODUCT_NET_WEIGHT, ProductContract.ProductEntry.IMAGE_FILENAME)
val selection = "${ProductContract.ProductEntry.PRODUCT_NAME} = ?" val selection = "${ProductContract.ProductEntry.PRODUCT_NAME} = ?"
val selectionArgs = arrayOf("обогреватель") val selectionArgs = arrayOf("test")
val cursor = db.query(ProductContract.ProductEntry.TABLE_NAME, projection, selection, selectionArgs, null, null, null) val cursor = db.query(ProductContract.ProductEntry.TABLE_NAME, projection, selection, selectionArgs, null, null, null)

View File

@ -1,19 +1,9 @@
<FrameLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="300dp" xmlns:tools="http://schemas.android.com/tools" android:layout_width="300dp"
android:layout_height="300dp"> android:layout_height="300dp">
<org.foxarmy.barcodescannerforemployees.AbstractProductView
style="@style/Widget.Theme.BarcodeScannerForEmployees.MyView"
android:layout_width="300dp"
android:layout_height="300dp"
android:paddingLeft="20dp"
android:paddingBottom="40dp"
app:exampleDimension="24sp"
app:exampleString="Hello, AbstractProductView"
app:exampleDrawable="@android:drawable/ic_menu_add">
</org.foxarmy.barcodescannerforemployees.AbstractProductView>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="300dp" android:layout_width="300dp"
android:layout_height="300dp" android:id="@+id/productLayout"> android:layout_height="300dp" android:id="@+id/productLayout">
@ -47,6 +37,13 @@
app:layout_constraintStart_toEndOf="@+id/productNetWeightView" app:layout_constraintStart_toEndOf="@+id/productNetWeightView"
app:layout_constraintTop_toBottomOf="@+id/productNameView" android:layout_marginTop="10dp" app:layout_constraintTop_toBottomOf="@+id/productNameView" android:layout_marginTop="10dp"
android:fontFamily="monospace" android:textSize="12sp" android:layout_marginStart="8dp"/> android:fontFamily="monospace" android:textSize="12sp" android:layout_marginStart="8dp"/>
<TextView
android:text="@string/sample_category"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/categoryView"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="20dp" android:fontFamily="monospace" android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="20dp"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout> </LinearLayout>

View File

@ -16,4 +16,5 @@
<string name="sample_product_name">Уззкое название товара</string> <string name="sample_product_name">Уззкое название товара</string>
<string name="sample_product_net_weight">1998</string> <string name="sample_product_net_weight">1998</string>
<string name="sample_unit">g</string> <string name="sample_unit">g</string>
<string name="sample_category">Sample category</string>
</resources> </resources>