2015-09-26 161 views
3

我想创建一个活动与不在ActionBar中的SearchView(实际上,我使用NoActionBar主题)。现在,我想这个搜索查看有圆角(不是的EditText实际搜索查看里面,但搜索查看本身),android自定义searchView圆角

这样的:Mockup

所有我可以管理是这样的:actual SearchView

有人能告诉我我必须改变什么吗? XML活动的:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:clipChildren="false"> 
<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="150dp" 
    android:background="@color/theBlue"> 

    <SearchView 
     android:id="@+id/search_view" 
     android:layout_width="1000dp" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="20dp" 
     android:background="@drawable/bg_white_rounded" 
     android:clickable="true"/> 
</RelativeLayout> 

可绘制/ bg_white_rounded.xml的代码:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="#ffffff"/> 
<corners android:radius="10dp"/> 
<padding android:left="0dp" 
    android:bottom="0dp" 
    android:right="0dp" 
    android:top="0dp"/> 
</shape> 

活性的代码:

public class MainActivity extends AppCompatActivity { 

SearchView searchView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Get search view and modify it to our needs 
    searchView = (SearchView) findViewById(R.id.search_view); 
    searchView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      searchView.onActionViewExpanded(); 
     } 
    }); 
    //int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null); 
    //int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); 
    int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_badge", null, null); 
    View searchPlate = searchView.findViewById(searchPlateId); 
    //View searchPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); 
    searchPlate.setBackgroundResource(R.drawable.bg_white_rounded); 
} 
} 

注释行事我已经尝试过但没有工作。 谢谢!

回答

4

尽管拉詹KS(谢谢!)答案的作品,它不像设计模型100%(填充自然增加SearchView的大小,而不增加包含EditText的大小)。

我找到了解决办法是这样的: 在MainActivity.java,改变search_edit_frame,search_plate和search_bar:

int searchFrameId = searchView.getContext().getResources().getIdentifier("android:id/search_edit_frame", null, null); 
    View searchFrame = searchView.findViewById(searchFrameId); 
    searchFrame.setBackgroundResource(R.drawable.bg_white_rounded); 

    int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null); 
    View searchPlate = findViewById(searchPlateId); 
    searchPlate.setBackgroundResource(R.drawable.bg_white_rounded); 

    int searchBarId = searchView.getContext().getResources().getIdentifier("android:id/search_bar", null, null); 
    View searchBar = findViewById(searchBarId); 
    searchBar.setBackgroundResource(R.drawable.bg_white_rounded); 

这导致搜索查看看酷似样机。

2

只要给padding = corner radius,因为边角按实际搜索查看后台隐藏将其设置为备份,所以填充使得招

绘制/ bg_white_rounded.xml:

<?xml version="1.0" encoding="utf-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#ffffff"/> 
    <corners android:radius="8dp"/> 
    <padding android:left="8dp" 
     android:bottom="8dp" 
     android:right="8dp" 
     android:top="8dp"/> 
    </shape>