 <p>the empty view positioning in the layout is done 100% by the developer. Yes, that is by design, Android in general favours flexibility than easy of coding.</p> <p>If you look in the <a href="https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/AdapterView.java" rel="nofollow"><code>AdapterView</code> source code</a> you'll see what I'm talking about, around line 737 you'll see this</p> <pre><code>mEmptyView.setVisibility(View.VISIBLE); </code></pre> <p>and this</p> <pre><code>if (mEmptyView != null) mEmptyView.setVisibility(View.GONE); </code></pre> <p>that means, all that the <code>ListView</code> do with the <code>emptyView</code> object you're passing is calling <code>setVisibility(boolean)</code> on it.</p> <p>So, now that we know it's just a normal layout, with no special treatment it's easier to handle it. If you don't want to write on your layout again and again the same XML for empty view, you can (should) have a empty_view.xml with just the empty view and inside each of your XML with the list you position the empty_view.xml using the <code>&lt;include&gt;</code> tag. Like this: <a href="http://developer.android.com/training/improving-layouts/reusing-layouts.html" rel="nofollow">http://developer.android.com/training/improving-layouts/reusing-layouts.html</a> and on the code you simply call:</p> <pre><code>listview.setEmptyView(root.findViewById(R.id.empty_view)); </code></pre> <p>or you can do it by code still... but that will involve setting layout params for the "parent" to proper organise it.</p> <p>hope it helps.</p>