2015-01-05 13 views
19

Tôi có một EditText bên trong một AlertDialog. Nó trông như thế nàyThêm lề lớn hơn vào EditText trong Android AlertDialog

enter image description here

Xem nơi nó nói tddjdjck và làm thế nào nó được thụt vào khá nhiều. Đó là những gì tôi muốn (tôi đã sử dụng setPadding với trái và phải được đặt thành 50), nhưng tôi cũng muốn dòng màu xanh bên dưới nó cũng được thụt vào. Làm thế nào để làm điều đó?

Mã Tôi đang sử dụng là dưới đây:

  final AlertDialog.Builder alert = new AlertDialog.Builder(thisActivity); 
      final EditText input = new EditText(thisActivity); 
      input.setSingleLine(); 
      input.setPadding(50, 0, 50, 0); 

      alert.setTitle("by..."); 
      alert.setMessage("enter the name of the person who did:"); 
      alert.setView(input); 
      alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        String value = input.getText().toString().trim(); 

       } 
      }); 

      alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        dialog.cancel(); 
       } 
      }); 
      alert.show(); 

Cảm ơn bạn

+1

thay vì đệm sử dụng layout_margin từ trái và phải –

+0

làm nó như thế này. settext ("văn bản của bạn \ n \ n"). Đơn giản và thực hiện công việc –

+0

Tôi có thể sử dụng chức năng nào để đặt layout_margin? – b85411

Trả lời

53
final AlertDialog.Builder alert = new AlertDialog.Builder(thisActivity); 
final EditText input = new EditText(thisActivity); 
input.setSingleLine(); 
FrameLayout container = new FrameLayout(thisActivity); 
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
params.leftMargin = getResources().getDimensionPixelSize(R.dimen.dialog_margin); 
input.setLayoutParams(params); 
container.addView(input); 
alert.setTitle("by..."); 
alert.setMessage("test message"); 
alert.setView(container); 

Hãy chắc chắn rằng bạn thêm dòng khác để tập tin tài nguyên dimens.xml của bạn, chẳng hạn như

<dimen name="dialog_margin">20dp</dimen> 
+0

Cảm ơn, đã sửa nó – b85411

+0

Thật không may, chúng tôi đã bọc EditText trong FrameLayout vì trình xây dựng xóa các layoutparams của bất kỳ thứ gì được thêm vào thông qua setView. Không phải là một giao dịch đắt tiền như vậy ở đây, nhưng các hệ thống phân cấp xem nên luôn phẳng nhất có thể. –

+0

Có cách nào tốt hơn so với mã hóa cứng lề không? Có giống như một hằng số kiểu trong R. sao cho lề tiêu đề và lề này luôn giữ nguyên không? – Phil

11

Bạn có thể chuyển thông số khoảng trắng trong phương thức setView

alert.setView(view ,left_space , top_space , right_space , bottom_space); 

Vì vậy, trong trường hợp của bạn, bạn có thể thử này

alert.setView(input , 50 ,0, 50 , 0); 
+12

Điều này không còn được dùng cho các API mới hơn – jensbrulmans

+3

@JensBrulmans nhưng nó vẫn hoạt động mà không cần thêm một tá dòng mã nữa. – Bolein95

1

Đây là Kotlin chức năng mở rộng cho các Builder để thiết lập EditText xem.

fun android.support.v7.app.AlertDialog.Builder.setEditText(editText: EditText): AlertDialog.Builder { 

    fun dpToPixel(dp: Float, context: Context): Float { 
     val resources = context.resources 
     val metrics = resources.displayMetrics 
     return dp * (metrics.densityDpi.toFloat()/DisplayMetrics.DENSITY_DEFAULT) 
    } 

    val container = FrameLayout(context) 
    container.addView(editText) 
    val containerParams = FrameLayout.LayoutParams(
      FrameLayout.LayoutParams.MATCH_PARENT, 
      FrameLayout.LayoutParams.WRAP_CONTENT 
    ) 
    val margins = 16F 
    containerParams.topMargin = dpToPixel(margins/2, context).toInt() 
    containerParams.leftMargin = dpToPixel(margins, context).toInt() 
    containerParams.rightMargin = dpToPixel(margins, context).toInt() 
    container.layoutParams = containerParams 

    val superContainer = FrameLayout(context) 
    superContainer.addView(container) 

    setView(superContainer) 

    return this 
} 

Cách sử dụng ví dụ

val editText = EditText(this) 
editText.hint = "Hint" 
AlertDialog.Builder(this) 
     .setTitle("Title") 
     .setEditText(editText) 
     .setPositiveButton("OK", { _: DialogInterface, _: Int -> 
      // Do your work with text here 
      val text = editText.text.toString() 
      Toast.makeText(applicationContext, text, Toast.LENGTH_SHORT).show() 
     }) 
     .setNegativeButton("Cancel", null) 
     .show() 

quả

Result

Các vấn đề liên quan