2011-02-16 87 views
2

我創建了一個自定義的EditText(實際上,我只是設置了一個可繪製的背景)。問題是它的文本始終是頂部對齊的,我希望它是垂直居中對齊的。我已經嘗試將其引力設置爲CENTER_VERTICAL,但它不起作用。這是我創建的繪製:自定義EditText垂直對齊

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" android:gravity="center_vertical"> 
<solid android:color="#FFFFFF"/> 
<stroke android:width="1dp" android:color="#88BA52" /> 
<corners 
    android:bottomRightRadius="10dp" 
    android:bottomLeftRadius="10dp" 
    android:topLeftRadius="10dp" 
    android:topRightRadius="10dp"/> 
</shape> 

這裏就是我如何創建它:

searchEditText = new EditText(getContext()); 
searchEditText.setTextSize(12); 
searchEditText.setSingleLine(); 
searchEditText.setGravity(Gravity.CENTER_VERTICAL); 
searchEditText.setHint(R.string.search_hint); 
searchEditText.setBackgroundDrawable(
     getResources().getDrawable(R.drawable.search_field)); 
addView(searchEditText); 

回答

2
searchEditText.setGravity(Gravity.CENTER | Gravity.LEFT); 

這可能有助於

+0

謝謝Markiz的回覆。但不幸的是,這並沒有幫助。事實上,我將它設置其部件上這樣的: `左= 10;`` 頂= 10;`` 右=寬度 - 10;`` 底部=頂部+ 45;`` searchEditText。佈局(左,上,右,下);` 我懷疑這個自定義高度是搞砸了。但我不知道如何解決它。 – 2011-02-16 14:28:26

0

我看到了同樣的問題。以編程方式創建EditText導致垂直方向上的重力被強制爲TOP(而水平居中仍然有效)......直到我將設置背景的調用註釋掉了!在這種情況下,垂直和水平的重力都是值得的。

這裏是我的代碼:

inputField.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
inputField.setLinksClickable(false); 
inputField.setInputType(ie.getInputType()); 
inputField.setFadingEdgeLength(0); 
inputField.setHorizontalFadingEdgeEnabled(false); 
inputField.setPadding(borderWidth.left,borderWidth.top,borderWidth.right,borderWidth.bottom); 
inputField.setOnEditorActionListener(this); 
inputField.setHint(hint); 
inputField.setCompoundDrawables(null, null, null, null); 

// comment out the next two lines to see gravity working fine 
inputField.setBackgroundDrawable(null); 
inputField.setBackgroundColor(Color.WHITE); 

inputField.setTextColor(Color.BLACK); 
inputField.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20); 
inputField.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); 

現在,踩在操作系統源代碼的跟蹤顯示,垂直居中奇怪的計算依賴於後臺報告的高度。 EditText中的Defaut是一個NinePatchDrawable,具有64像素高的默認位圖。如果你的EditText是這個高度,你的文字將居中。否則,它會比它應該更接近頂端。設置背景顏色將在內部使用ColorDrawable,其報告固有高度爲零,因此僅使用文本高度並將其垂直對齊到TOP。

解決這個問題是創建自己的Drawable子類,將其設置爲的EditText實例的背景的方式,確保您撥打setBounds()上繪製所以它有一個高度報告,並覆蓋getIntrinsicHeight()繪圖的方法報告使用setBounds()設置的高度。

1

請嘗試縮小字體大小。無論出於何種原因,我發現如果字體太大,即使您覺得EditText應該足夠高以容納文本,文本將顯示爲高於垂直居中。

向下調整字體大小,或者如果您使用的是默認值,請指定字體大小,直到找到足夠小的字體大小以使其正確居中。